From: <Saved by Blink>
Snapshot-Content-Location: https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/
Subject: =?utf-8?Q?=E5=9C=A8=20Typescript=20=E4=B8=AD=E4=BD=BF=E7=94=A8=20gRPC=20?=
 =?utf-8?Q?=C2=B7=20Cong?=
Date: Wed, 7 Aug 2024 17:04:56 +0800
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----"


------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/html
Content-ID: <frame-3662DD5DA02A66421E9D41FB64F24A0D@mhtml.blink>
Content-Transfer-Encoding: quoted-printable
Content-Location: https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/

<!DOCTYPE html><html lang=3D"en" dir=3D"ltr" class=3D"scroll-smooth" data-d=
efault-appearance=3D"light" data-auto-appearance=3D"true"><head><meta http-=
equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8"><link rel=3D"=
stylesheet" type=3D"text/css" href=3D"cid:css-cc00ac89-7360-4d9b-8ce2-0f77a=
85ee98d@mhtml.blink" /><link id=3D"giscus-css" rel=3D"stylesheet" href=3D"h=
ttps://giscus.app/default.css"><meta http-equiv=3D"content-language" conten=
t=3D"en"><meta name=3D"viewport" content=3D"width=3Ddevice-width,initial-sc=
ale=3D1"><meta name=3D"theme-color" content=3D"rgb(255,255,255)"><meta http=
-equiv=3D"x-ua-compatible" content=3D"ie=3Dedge"><title>=E5=9C=A8 Typescrip=
t =E4=B8=AD=E4=BD=BF=E7=94=A8 gRPC =C2=B7 Cong</title><meta name=3D"title" =
content=3D"=E5=9C=A8 Typescript =E4=B8=AD=E4=BD=BF=E7=94=A8 gRPC =C2=B7 Con=
g"><meta name=3D"description" content=3D"gRPC =E6=98=AF=E4=B8=80=E4=B8=AA=
=E9=AB=98=E6=80=A7=E8=83=BD, =E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=E8=AF=AD=
=E8=A8=80=E7=9A=84 RPC =E6=A1=86=E6=9E=B6, =E5=AE=98=E6=96=B9=E5=B7=B2=E7=
=BB=8F=E6=94=AF=E6=8C=81=E4=BA=86 NodeJS =E8=AF=AD=E8=A8=80. =E8=80=8C Type=
script =E4=BD=9C=E4=B8=BA JavaScript =E7=9A=84=E8=B6=85=E9=9B=86, =E5=8F=AF=
=E4=BB=A5=E6=8F=90=E9=AB=98 js =E4=BB=A3=E7=A0=81=E7=9A=84=E5=8F=AF=E7=BB=
=B4=E6=8A=A4=E6=80=A7, =E5=B9=B6=E4=B8=94=E4=BB=A3=E7=A0=81=E6=8F=90=E7=A4=
=BA=E5=BE=88=E4=B8=8D=E9=94=99, =E5=B7=B2=E5=9C=A8 js =E5=B8=82=E5=9C=BA=E5=
=8D=A0=E6=8D=AE=E4=BA=86=E5=BE=88=E5=A4=A7=E4=BB=BD=E9=A2=9D. =E6=9C=AC=E6=
=96=87=E7=AE=80=E5=8D=95=E4=BB=8B=E7=BB=8D=E4=B8=8B gRPC =E5=9C=A8 Typescri=
pt =E4=B8=AD=E5=A6=82=E4=BD=95=E4=BD=BF=E7=94=A8."><link rel=3D"canonical" =
href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/"><link ty=
pe=3D"text/css" rel=3D"stylesheet" href=3D"https://blog.cong.moe/css/main.b=
undle.min.827e4067f785eb8991b29db972c66513a2555b27ab79607dadc6efd017da4df0f=
d429efe9ed49a1fc101da2d1cb711816bb8efc4e01baaf9eeb352b258c9f887.css">

<link rel=3D"apple-touch-icon" sizes=3D"180x180" href=3D"https://blog.cong.=
moe/apple-touch-icon.png"><link rel=3D"icon" type=3D"image/png" sizes=3D"32=
x32" href=3D"https://blog.cong.moe/favicon-32x32.png"><link rel=3D"icon" ty=
pe=3D"image/png" sizes=3D"16x16" href=3D"https://blog.cong.moe/favicon-16x1=
6.png"><link rel=3D"manifest" href=3D"https://blog.cong.moe/site.webmanifes=
t"><meta property=3D"og:title" content=3D"=E5=9C=A8 Typescript =E4=B8=AD=E4=
=BD=BF=E7=94=A8 gRPC"><meta property=3D"og:description" content=3D"gRPC =E6=
=98=AF=E4=B8=80=E4=B8=AA=E9=AB=98=E6=80=A7=E8=83=BD, =E6=94=AF=E6=8C=81=E5=
=A4=9A=E7=A7=8D=E8=AF=AD=E8=A8=80=E7=9A=84 RPC =E6=A1=86=E6=9E=B6, =E5=AE=
=98=E6=96=B9=E5=B7=B2=E7=BB=8F=E6=94=AF=E6=8C=81=E4=BA=86 NodeJS =E8=AF=AD=
=E8=A8=80. =E8=80=8C Typescript =E4=BD=9C=E4=B8=BA JavaScript =E7=9A=84=E8=
=B6=85=E9=9B=86, =E5=8F=AF=E4=BB=A5=E6=8F=90=E9=AB=98 js =E4=BB=A3=E7=A0=81=
=E7=9A=84=E5=8F=AF=E7=BB=B4=E6=8A=A4=E6=80=A7, =E5=B9=B6=E4=B8=94=E4=BB=A3=
=E7=A0=81=E6=8F=90=E7=A4=BA=E5=BE=88=E4=B8=8D=E9=94=99, =E5=B7=B2=E5=9C=A8 =
js =E5=B8=82=E5=9C=BA=E5=8D=A0=E6=8D=AE=E4=BA=86=E5=BE=88=E5=A4=A7=E4=BB=BD=
=E9=A2=9D. =E6=9C=AC=E6=96=87=E7=AE=80=E5=8D=95=E4=BB=8B=E7=BB=8D=E4=B8=8B =
gRPC =E5=9C=A8 Typescript =E4=B8=AD=E5=A6=82=E4=BD=95=E4=BD=BF=E7=94=A8."><=
meta property=3D"og:type" content=3D"article"><meta property=3D"og:url" con=
tent=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/"><meta pr=
operty=3D"og:image" content=3D"https://blog.cong.moe/post/2021-03-16-grpc-o=
n-typescript/feature-grpc-on-typescript.jpeg"><meta property=3D"article:sec=
tion" content=3D"post"><meta property=3D"article:published_time" content=3D=
"2021-03-16T15:32:21+08:00"><meta property=3D"article:modified_time" conten=
t=3D"2021-03-16T15:32:21+08:00"><meta property=3D"og:site_name" content=3D"=
Cong"><meta name=3D"twitter:card" content=3D"summary_large_image"><meta nam=
e=3D"twitter:image" content=3D"https://blog.cong.moe/post/2021-03-16-grpc-o=
n-typescript/feature-grpc-on-typescript.jpeg"><meta name=3D"twitter:title" =
content=3D"=E5=9C=A8 Typescript =E4=B8=AD=E4=BD=BF=E7=94=A8 gRPC"><meta nam=
e=3D"twitter:description" content=3D"gRPC =E6=98=AF=E4=B8=80=E4=B8=AA=E9=AB=
=98=E6=80=A7=E8=83=BD, =E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=E8=AF=AD=E8=A8=
=80=E7=9A=84 RPC =E6=A1=86=E6=9E=B6, =E5=AE=98=E6=96=B9=E5=B7=B2=E7=BB=8F=
=E6=94=AF=E6=8C=81=E4=BA=86 NodeJS =E8=AF=AD=E8=A8=80. =E8=80=8C Typescript=
 =E4=BD=9C=E4=B8=BA JavaScript =E7=9A=84=E8=B6=85=E9=9B=86, =E5=8F=AF=E4=BB=
=A5=E6=8F=90=E9=AB=98 js =E4=BB=A3=E7=A0=81=E7=9A=84=E5=8F=AF=E7=BB=B4=E6=
=8A=A4=E6=80=A7, =E5=B9=B6=E4=B8=94=E4=BB=A3=E7=A0=81=E6=8F=90=E7=A4=BA=E5=
=BE=88=E4=B8=8D=E9=94=99, =E5=B7=B2=E5=9C=A8 js =E5=B8=82=E5=9C=BA=E5=8D=A0=
=E6=8D=AE=E4=BA=86=E5=BE=88=E5=A4=A7=E4=BB=BD=E9=A2=9D. =E6=9C=AC=E6=96=87=
=E7=AE=80=E5=8D=95=E4=BB=8B=E7=BB=8D=E4=B8=8B gRPC =E5=9C=A8 Typescript =E4=
=B8=AD=E5=A6=82=E4=BD=95=E4=BD=BF=E7=94=A8."><meta name=3D"author" content=
=3D"Cong"><link href=3D"mailto:zhangcong1992@gmail.com" rel=3D"me"><link hr=
ef=3D"https://github.com/zcong1993" rel=3D"me"><link href=3D"https://m.cmx.=
im/@zcong1993" rel=3D"me"><link href=3D"https://twitter.com/CongZhangDev" r=
el=3D"me"></head><body class=3D"flex flex-col h-screen px-6 m-auto text-lg =
leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:te=
xt-neutral sm:px-14 md:px-24 lg:px-32"><div id=3D"the-top" class=3D"absolut=
e flex self-center"><a class=3D"px-3 py-1 text-sm -translate-y-8 rounded-b-=
lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600" href=3D"https://=
blog.cong.moe/post/2021-03-16-grpc-on-typescript/#main-content"><span class=
=3D"font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">=E2=
=86=93</span>Skip to main content</a></div><header class=3D"py-6 font-semib=
old text-neutral-900 dark:text-neutral print:hidden sm:py-10"><nav class=3D=
"flex items-start justify-between sm:items-center"><div class=3D"flex flex-=
row items-center"><a class=3D"decoration-primary-500 hover:underline hover:=
decoration-2 hover:underline-offset-2" rel=3D"me" href=3D"https://blog.cong=
.moe/">Cong</a></div><ul class=3D"flex flex-col list-none ltr:text-right rt=
l:text-left sm:flex-row"><li class=3D"mb-1 group sm:mb-0 ltr:sm:mr-7 ltr:sm=
:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"><a href=3D"https://blog.cong.moe/p=
ost" title=3D""><span class=3D"decoration-primary-500 group-hover:underline=
 group-hover:decoration-2 group-hover:underline-offset-2">Posts</span></a><=
/li><li class=3D"mb-1 group sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-=
7 rtl:sm:last:ml-0"><a href=3D"https://blog.cong.moe/tags/" title=3D"Tags">=
<span class=3D"decoration-primary-500 group-hover:underline group-hover:dec=
oration-2 group-hover:underline-offset-2">Tags</span></a></li><li class=3D"=
mb-1 group sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-=
0"><a href=3D"https://blog.cong.moe/books/" title=3D"Books"><span class=3D"=
decoration-primary-500 group-hover:underline group-hover:decoration-2 group=
-hover:underline-offset-2">Books</span></a></li><li class=3D"mb-1 group sm:=
mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"><a href=3D"=
https://blog.cong.moe/about/" title=3D"About"><span class=3D"decoration-pri=
mary-500 group-hover:underline group-hover:decoration-2 group-hover:underli=
ne-offset-2">About</span></a></li><li class=3D"mb-1 group sm:mb-0 ltr:sm:mr=
-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"><a href=3D"https://github=
.com/zcong1993" title=3D"" target=3D"_blank"><span class=3D"transition-colo=
rs group-dark:hover:text-primary-400 group-hover:text-primary-600"><span cl=
ass=3D"relative inline-block align-text-bottom icon"><svg xmlns=3D"http://w=
ww.w3.org/2000/svg" viewBox=3D"0 0 496 512"><path fill=3D"currentcolor" d=
=3D"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6.0-2 2.3-3.6 5.2-=
3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6.0 6.2-2=
s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 =
2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.=
1 8 0 113.3.0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.=
1.0-6.2-.3-40.4-.3-61.4.0.0-70 15-84.7-29.8.0.0-11.4-29.1-27.8-36.6.0.0-22.=
9-15.7 1.6-15.4.0.0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8=
.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5.0-27.5 7.6-41.3 23.6-58.9-2=
.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.=
8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8=
 31.5 25.8 58.9.0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4.0 33.=
7-.3 75.4-.3 83.6.0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 49=
6 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 =
1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9=
 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 =
1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2=
.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6.0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1=
.6-3.9.0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></span></span></a></li><li =
class=3D"mb-1 group sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm=
:last:ml-0"><button id=3D"search-button-1" title=3D"Search (/)">
<span class=3D"transition-colors group-dark:hover:text-primary-400 group-ho=
ver:text-primary-600"><span class=3D"relative inline-block align-text-botto=
m icon"><svg aria-hidden=3D"true" focusable=3D"false" data-prefix=3D"fas" d=
ata-icon=3D"search" class=3D"svg-inline--fa fa-search fa-w-16" role=3D"img"=
 xmlns=3D"http://www.w3.org/2000/svg" viewBox=3D"0 0 512 512"><path fill=3D=
"currentcolor" d=3D"M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3=
 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0=
 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.=
0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 =
57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"></path><=
/svg></span></span><span class=3D"decoration-primary-500 group-hover:underl=
ine group-hover:decoration-2 group-hover:underline-offset-2"></span></butto=
n></li></ul></nav></header><div class=3D"relative flex flex-col grow"><main=
 id=3D"main-content" class=3D"grow"><article><header class=3D"max-w-prose">=
<h1 class=3D"mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutra=
l">=E5=9C=A8 Typescript =E4=B8=AD=E4=BD=BF=E7=94=A8 gRPC</h1><div class=3D"=
mt-8 mb-12 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><=
div class=3D"flex flex-row flex-wrap items-center"><time datetime=3D"2021-0=
3-16 15:32:21 +0800 +0800">March 16, 2021</time><span class=3D"px-2 text-pr=
imary-500">=C2=B7</span><span title=3D"Reading time">5 mins</span></div><di=
v class=3D"my-1 text-xs leading-relaxed text-neutral-500 dark:text-neutral-=
400"><a href=3D"https://blog.cong.moe/tags/grpc/" class=3D"rounded-md borde=
r border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-prim=
ary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:te=
xt-primary-400">gRPC</a>
<a href=3D"https://blog.cong.moe/tags/rpc/" class=3D"rounded-md border bord=
er-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-70=
0 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-pri=
mary-400">RPC</a>
<a href=3D"https://blog.cong.moe/tags/nodejs/" class=3D"rounded-md border b=
order-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary=
-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-=
primary-400">NodeJS</a>
<a href=3D"https://blog.cong.moe/tags/typescript/" class=3D"rounded-md bord=
er border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-pri=
mary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:t=
ext-primary-400">TypeScript</a></div></div><div class=3D"prose"><img class=
=3D"mb-6 -mt-4 rounded-md" src=3D"https://blog.cong.moe/post/2021-03-16-grp=
c-on-typescript/feature-grpc-on-typescript_hu6ff6336af5f6f71e945c1f68861ded=
36_208434_660x0_resize_q75_box.jpeg" alt=3D"" width=3D"610" height=3D"407">=
</div></header><section class=3D"flex flex-col max-w-full mt-0 prose dark:p=
rose-invert lg:flex-row"><div class=3D"order-first px-0 lg:order-last lg:ma=
x-w-xs ltr:lg:pl-8 rtl:lg:pr-8"><div class=3D"toc ltr:pl-5 rtl:pr-5 print:h=
idden lg:sticky lg:top-10"><details open=3D"" class=3D"mt-0 overflow-hidden=
 rounded-lg ltr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5"><summary class=3D"block =
py-1 text-lg font-semibold cursor-pointer bg-neutral-100 text-neutral-800 l=
tr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5 dark:bg-neutral-700 dark:text-neutral-=
100 lg:hidden">Table of Contents</summary><div class=3D"py-2 border-dotted =
border-neutral-300 ltr:-ml-5 ltr:border-l ltr:pl-5 rtl:-mr-5 rtl:border-r r=
tl:pr-5 dark:border-neutral-600"><nav id=3D"TableOfContents"><ul><li><a hre=
f=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#%E5%AE%98%E6=
%96%B9%E5%BA%93%E9%80%89%E6%8B%A9">=E5=AE=98=E6=96=B9=E5=BA=93=E9=80=89=E6=
=8B=A9</a></li><li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on=
-typescript/#%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%B7%A5%E5%85%B7%E9%80%8=
9%E6%8B%A9">=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=B7=A5=E5=85=B7=E9=80=89=
=E6=8B=A9</a></li><li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc=
-on-typescript/#grpc-rpc-%E7%B1%BB%E5%9E%8B">grpc rpc =E7=B1=BB=E5=9E=8B</a=
><ul><li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescrip=
t/#1-%E4%B8%80%E5%BA%94%E4%B8%80%E7%AD%94">1. =E4=B8=80=E5=BA=94=E4=B8=80=
=E7=AD=94</a><ul><li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc-=
on-typescript/#server-%E7%AB%AF">server =E7=AB=AF</a></li><li><a href=3D"ht=
tps://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#client-%E7%AB%AF">c=
lient =E7=AB=AF</a></li></ul></li><li><a href=3D"https://blog.cong.moe/post=
/2021-03-16-grpc-on-typescript/#2-server-%E7%AB%AF%E6%B5%81">2. server =E7=
=AB=AF=E6=B5=81</a><ul><li><a href=3D"https://blog.cong.moe/post/2021-03-16=
-grpc-on-typescript/#server-%E7%AB%AF-1">server =E7=AB=AF</a></li><li><a hr=
ef=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#client-%E7%=
AB%AF-1">client =E7=AB=AF</a></li></ul></li><li><a href=3D"https://blog.con=
g.moe/post/2021-03-16-grpc-on-typescript/#3-client-%E7%AB%AF%E6%B5%81">3. c=
lient =E7=AB=AF=E6=B5=81</a><ul><li><a href=3D"https://blog.cong.moe/post/2=
021-03-16-grpc-on-typescript/#server-%E7%AB%AF-2">server =E7=AB=AF</a></li>=
<li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#cl=
ient-%E7%AB%AF-2">client =E7=AB=AF</a></li></ul></li><li><a href=3D"https:/=
/blog.cong.moe/post/2021-03-16-grpc-on-typescript/#4-%E5%8F%8C%E5%90%91%E6%=
B5%81">4. =E5=8F=8C=E5=90=91=E6=B5=81</a><ul><li><a href=3D"https://blog.co=
ng.moe/post/2021-03-16-grpc-on-typescript/#server-%E7%AB%AF-3">server =E7=
=AB=AF</a></li><li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on=
-typescript/#client-%E7%AB%AF-3">client =E7=AB=AF</a></li></ul></li></ul></=
li><li><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/=
#%E6%80%BB%E7%BB%93">=E6=80=BB=E7=BB=93</a></li></ul></nav></div></details>=
</div></div><div class=3D"min-w-0 min-h-0 max-w-prose grow"><p>gRPC =E6=98=
=AF=E4=B8=80=E4=B8=AA=E9=AB=98=E6=80=A7=E8=83=BD, =E6=94=AF=E6=8C=81=E5=A4=
=9A=E7=A7=8D=E8=AF=AD=E8=A8=80=E7=9A=84 RPC =E6=A1=86=E6=9E=B6, =E5=AE=98=
=E6=96=B9=E5=B7=B2=E7=BB=8F=E6=94=AF=E6=8C=81=E4=BA=86 NodeJS =E8=AF=AD=E8=
=A8=80. =E8=80=8C Typescript =E4=BD=9C=E4=B8=BA JavaScript =E7=9A=84=E8=B6=
=85=E9=9B=86, =E5=8F=AF=E4=BB=A5=E6=8F=90=E9=AB=98 js =E4=BB=A3=E7=A0=81=E7=
=9A=84=E5=8F=AF=E7=BB=B4=E6=8A=A4=E6=80=A7, =E5=B9=B6=E4=B8=94=E4=BB=A3=E7=
=A0=81=E6=8F=90=E7=A4=BA=E5=BE=88=E4=B8=8D=E9=94=99, =E5=B7=B2=E5=9C=A8 js =
=E5=B8=82=E5=9C=BA=E5=8D=A0=E6=8D=AE=E4=BA=86=E5=BE=88=E5=A4=A7=E4=BB=BD=E9=
=A2=9D. =E6=9C=AC=E6=96=87=E7=AE=80=E5=8D=95=E4=BB=8B=E7=BB=8D=E4=B8=8B gRP=
C =E5=9C=A8 Typescript =E4=B8=AD=E5=A6=82=E4=BD=95=E4=BD=BF=E7=94=A8.</p><h=
2 id=3D"=E5=AE=98=E6=96=B9=E5=BA=93=E9=80=89=E6=8B=A9" class=3D"relative gr=
oup">=E5=AE=98=E6=96=B9=E5=BA=93=E9=80=89=E6=8B=A9 <span class=3D"absolute =
top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose g=
roup-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dark:group=
-hover:text-neutral-700" style=3D"text-decoration-line:none!important" href=
=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#%e5%ae%98%e6%=
96%b9%e5%ba%93%e9%80%89%e6%8b%a9" aria-label=3D"Anchor">#</a></span></h2><p=
>=E6=97=A9=E5=B9=B4 grpc =E5=AE=98=E6=96=B9 NodeJS client =E6=98=AF=E5=9F=
=BA=E4=BA=8E c++ =E7=9A=84=E5=8E=9F=E7=94=9F addon (npm package: <a href=3D=
"https://yarnpkg.com/package/grpc" target=3D"_blank" rel=3D"noreferrer noop=
ener">grpc</a>), =E9=9A=8F=E7=9D=80=E7=BA=AF js =E7=89=88=E6=9C=AC(<a href=
=3D"https://yarnpkg.com/package/@grpc/grpc-js" target=3D"_blank" rel=3D"nor=
eferrer noopener">@grpc/grpc-js</a>)=E7=9A=84=E6=88=90=E7=86=9F, =E5=AE=98=
=E6=96=B9=E5=BC=83=E7=94=A8=E4=BA=86 native =E7=89=88=E6=9C=AC, =E6=89=80=
=E4=BB=A5=E6=B2=A1=E4=BB=80=E4=B9=88=E5=BF=85=E8=A6=81=E5=81=9A=E9=80=89=E6=
=8B=A9=E4=BA=86, =E9=80=89=E6=8B=A9=E7=BA=AF js =E7=89=88=E6=9C=AC=E5=B0=B1=
=E5=A4=9F=E4=BA=86.</p><h2 id=3D"=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=B7=
=A5=E5=85=B7=E9=80=89=E6=8B=A9" class=3D"relative group">=E4=BB=A3=E7=A0=81=
=E7=94=9F=E6=88=90=E5=B7=A5=E5=85=B7=E9=80=89=E6=8B=A9 <span class=3D"absol=
ute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-pro=
se group-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dark:g=
roup-hover:text-neutral-700" style=3D"text-decoration-line:none!important" =
href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#%e4%bb%a3=
%e7%a0%81%e7%94%9f%e6%88%90%e5%b7%a5%e5%85%b7%e9%80%89%e6%8b%a9" aria-label=
=3D"Anchor">#</a></span></h2><p>=E4=B8=80=E8=88=AC=E9=9D=99=E6=80=81=E8=AF=
=AD=E8=A8=80=E4=BD=BF=E7=94=A8 grpc =E6=97=B6, =E9=9C=80=E8=A6=81=E5=85=88=
=E4=BD=BF=E7=94=A8 <code>protoc</code> =E9=85=8D=E5=90=88=E5=90=84=E7=A7=8D=
=E8=AF=AD=E8=A8=80=E8=87=AA=E8=BA=AB=E7=9A=84=E4=BB=A3=E7=A0=81=E7=94=9F=E6=
=88=90=E6=8F=92=E4=BB=B6=E6=A0=B9=E6=8D=AE <code>proto</code> =E6=96=87=E4=
=BB=B6=E7=94=9F=E6=88=90=E5=87=BA=E5=AF=B9=E5=BA=94=E8=AF=AD=E8=A8=80=E7=9A=
=84 <code>message</code> =E7=B1=BB=E5=9E=8B, <code>grpc server</code> =E7=
=AB=AF=E9=9C=80=E8=A6=81=E5=AE=9E=E7=8E=B0=E7=9A=84 interface, <code>grpc c=
lient</code> =E4=BB=A3=E7=A0=81.</p><p>js =E8=BF=99=E7=A7=8D=E5=8A=A8=E6=80=
=81=E8=AF=AD=E8=A8=80=E5=AE=98=E6=96=B9=E6=8F=90=E4=BE=9B=E4=BA=86=E5=8A=A8=
=E6=80=81=E7=94=9F=E6=88=90=E5=B7=A5=E5=85=B7 <a href=3D"https://www.npmjs.=
com/package/@grpc/proto-loader" target=3D"_blank" rel=3D"noreferrer noopene=
r">@grpc/proto-loader</a>, =E4=B9=9F=E5=B0=B1=E6=98=AF=E4=B8=8D=E9=9C=80=E8=
=A6=81=E6=88=91=E4=BB=AC=E6=98=BE=E5=BC=8F=E7=94=9F=E6=88=90=E4=BB=A3=E7=A0=
=81, =E4=BD=86=E6=98=AF=E7=BC=BA=E7=82=B9=E5=BE=88=E6=98=8E=E6=98=BE: =E6=
=B2=A1=E6=9C=89=E4=BB=BB=E4=BD=95=E7=B1=BB=E5=9E=8B. =E7=94=B1=E4=BA=8E=E6=
=9C=AC=E6=96=87=E8=80=83=E8=99=91=E7=9A=84=E6=98=AF ts =E7=94=9F=E6=80=81, =
=E6=89=80=E4=BB=A5=E4=B8=8D=E8=80=83=E8=99=91=E6=AD=A4=E7=A7=8D=E6=96=B9=E5=
=BC=8F.</p><p>=E7=94=B1=E4=BA=8E=E6=98=AF ts, =E6=88=91=E4=BB=AC=E4=B8=8D=
=E5=85=89=E9=9C=80=E8=A6=81=E4=BB=A3=E7=A0=81=E8=BF=98=E9=9C=80=E8=A6=81=E7=
=B1=BB=E5=9E=8B=E7=94=9F=E6=88=90, =E6=88=91=E4=BB=AC=E9=80=89=E6=8B=A9 <a =
href=3D"https://github.com/improbable-eng/ts-protoc-gen" target=3D"_blank" =
rel=3D"noreferrer noopener">improbable-eng/ts-protoc-gen</a> =E4=BD=9C=E4=
=B8=BA=E7=94=9F=E6=88=90=E6=8F=92=E4=BB=B6.</p><p>=E4=BB=A5=E4=B8=8B=E9=9D=
=A2 proto =E6=96=87=E4=BB=B6=E4=B8=BE=E4=BE=8B:</p><div class=3D"highlight-=
wrapper"><div class=3D"highlight"><button class=3D"copy-button" type=3D"but=
ton" aria-label=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma">=
<code class=3D"language-protobuf" data-lang=3D"protobuf"><span class=3D"lin=
e"><span class=3D"cl"><span class=3D"n">syntax</span> <span class=3D"o">=3D=
</span> <span class=3D"s">"proto3"</span><span class=3D"p">;</span><span cl=
ass=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span><span class=3D"kn">package</span> <span class=3D"nn">pb</span>=
<span class=3D"p">;</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span><span class=3D"kd">message</span> <span class=3D"nc">EchoReque=
st</span> <span class=3D"p">{</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span>    <span class=3D"kt">string</span> <span class=3D"kd">messag=
e</span> <span class=3D"o">=3D</span> <span class=3D"mi">1</span><span clas=
s=3D"p">;</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span><span class=3D"p">}</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span><span class=3D"kd">service</span> <span class=3D"n">Hello</spa=
n> <span class=3D"p">{</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span>    <span class=3D"k">rpc</span> <span class=3D"n">Echo</span>=
<span class=3D"p">(</span><span class=3D"n">EchoRequest</span><span class=
=3D"p">)</span> <span class=3D"k">returns</span> <span class=3D"p">(</span>=
<span class=3D"n">EchoRequest</span><span class=3D"p">);</span><span class=
=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span>    <span class=3D"k">rpc</span> <span class=3D"n">ServerStrea=
m</span><span class=3D"p">(</span><span class=3D"n">EchoRequest</span><span=
 class=3D"p">)</span> <span class=3D"k">returns</span> <span class=3D"p">(<=
/span><span class=3D"n">stream</span> <span class=3D"n">EchoRequest</span><=
span class=3D"p">);</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span>    <span class=3D"k">rpc</span> <span class=3D"n">ClientStrea=
m</span><span class=3D"p">(</span><span class=3D"n">stream</span> <span cla=
ss=3D"n">EchoRequest</span><span class=3D"p">)</span> <span class=3D"k">ret=
urns</span> <span class=3D"p">(</span><span class=3D"n">EchoRequest</span><=
span class=3D"p">);</span><span class=3D"err">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span>    <span class=3D"k">rpc</span> <span class=3D"n">DuplexStrea=
m</span><span class=3D"p">(</span><span class=3D"n">stream</span> <span cla=
ss=3D"n">EchoRequest</span><span class=3D"p">)</span> <span class=3D"k">ret=
urns</span> <span class=3D"p">(</span><span class=3D"n">stream</span> <span=
 class=3D"n">EchoRequest</span><span class=3D"p">);</span><span class=3D"er=
r">
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"err"></span><span class=3D"p">}</span><span class=3D"err">
</span></span></span></code></pre></div></div><p>=E7=94=9F=E6=88=90=E8=84=
=9A=E6=9C=AC=E4=B8=BA:</p><div class=3D"highlight-wrapper"><div class=3D"hi=
ghlight"><button class=3D"copy-button" type=3D"button" aria-label=3D"Copy">=
Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"language-b=
ash" data-lang=3D"bash"><span class=3D"line"><span class=3D"cl"><span class=
=3D"c1"># Path to this plugin, Note this must be an abolsute path on Window=
s (see #15)</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"nv">PR=
OTOC_GEN_TS_PATH</span><span class=3D"o">=3D</span><span class=3D"s2">"./no=
de_modules/.bin/protoc-gen-ts"</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"c1"># =
Path to the grpc_node_plugin</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"nv">PR=
OTOC_GEN_GRPC_PATH</span><span class=3D"o">=3D</span><span class=3D"s2">"./=
node_modules/.bin/grpc_tools_node_protoc_plugin"</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"nv">OU=
T_DIR</span><span class=3D"o">=3D</span><span class=3D"s2">"./src/generated=
"</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">protoc <span class=3D=
"se">\
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"se"></span>    <span class=3D"c1"># =E7=94=9F=E6=88=90=E6=B6=88=E6=81=AF=
=E7=B1=BB=E5=9E=8B .js =E5=92=8C .d.ts =E6=96=87=E4=BB=B6</span>
</span></span><span class=3D"line"><span class=3D"cl">    --plugin<span cla=
ss=3D"o">=3D</span><span class=3D"s2">"protoc-gen-ts=3D</span><span class=
=3D"si">${</span><span class=3D"nv">PROTOC_GEN_TS_PATH</span><span class=3D=
"si">}</span><span class=3D"s2">"</span> <span class=3D"se">\
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"se"></span>    <span class=3D"c1"># =E7=94=9F=E6=88=90 grpc =E7=9B=B8=E5=
=85=B3 .js</span>
</span></span><span class=3D"line"><span class=3D"cl">    --plugin<span cla=
ss=3D"o">=3D</span><span class=3D"s2">"protoc-gen-grpc=3D</span><span class=
=3D"si">${</span><span class=3D"nv">PROTOC_GEN_GRPC_PATH</span><span class=
=3D"si">}</span><span class=3D"s2">"</span> <span class=3D"se">\
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"se"></span>    --js_out<span class=3D"o">=3D</span><span class=3D"s2">"imp=
ort_style=3Dcommonjs,binary:</span><span class=3D"si">${</span><span class=
=3D"nv">OUT_DIR</span><span class=3D"si">}</span><span class=3D"s2">"</span=
> <span class=3D"se">\
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"se"></span>    <span class=3D"c1"># =E4=BC=A0=E9=80=92=E5=8F=82=E6=95=B0, =
=E7=94=9F=E6=88=90 grpc .d.ts =E6=96=87=E4=BB=B6, =E5=B9=B6=E6=8C=87=E6=98=
=8E=E6=88=91=E4=BB=AC=E4=BD=BF=E7=94=A8=E7=9A=84=E6=98=AF @grpc/grpc-js</sp=
an>
</span></span><span class=3D"line"><span class=3D"cl">    --ts_out<span cla=
ss=3D"o">=3D</span><span class=3D"s2">"service=3Dgrpc-node,mode=3Dgrpc-js:<=
/span><span class=3D"si">${</span><span class=3D"nv">OUT_DIR</span><span cl=
ass=3D"si">}</span><span class=3D"s2">"</span> <span class=3D"se">\
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"se"></span>    --grpc_out<span class=3D"o">=3D</span><span class=3D"s2">"g=
rpc_js:</span><span class=3D"si">${</span><span class=3D"nv">OUT_DIR</span>=
<span class=3D"si">}</span><span class=3D"s2">"</span> <span class=3D"se">\
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"se"></span>    hello.proto
</span></span></code></pre></div></div><p>=E8=BF=90=E8=A1=8C=E5=90=8E=E4=BC=
=9A=E7=94=9F=E6=88=90=E8=BF=99=E5=9B=9B=E4=B8=AA=E6=96=87=E4=BB=B6:</p><div=
 class=3D"highlight-wrapper"><div class=3D"highlight"><button class=3D"copy=
-button" type=3D"button" aria-label=3D"Copy">Copy</button><pre tabindex=3D"=
0" class=3D"chroma"><code class=3D"language-bash" data-lang=3D"bash"><span =
class=3D"line"><span class=3D"cl">$ tree ./src/generated
</span></span><span class=3D"line"><span class=3D"cl">./src/generated
</span></span><span class=3D"line"><span class=3D"cl">=E2=94=9C=E2=94=80=E2=
=94=80 hello_grpc_pb.d.ts <span class=3D"c1"># grpc =E7=9B=B8=E5=85=B3</spa=
n>
</span></span><span class=3D"line"><span class=3D"cl">=E2=94=9C=E2=94=80=E2=
=94=80 hello_grpc_pb.js <span class=3D"c1"># grpc =E7=9B=B8=E5=85=B3</span>
</span></span><span class=3D"line"><span class=3D"cl">=E2=94=9C=E2=94=80=E2=
=94=80 hello_pb.d.ts <span class=3D"c1"># =E6=B6=88=E6=81=AF=E7=9B=B8=E5=85=
=B3</span>
</span></span><span class=3D"line"><span class=3D"cl">=E2=94=94=E2=94=80=E2=
=94=80 hello_pb.js <span class=3D"c1"># =E6=B6=88=E6=81=AF=E7=9B=B8=E5=85=
=B3</span>
</span></span></code></pre></div></div><p>=E5=8F=AA=E5=85=B3=E6=B3=A8=E7=94=
=9F=E6=88=90=E5=87=BA=E6=9D=A5=E7=9A=84=E7=B1=BB=E5=9E=8B=E6=96=87=E4=BB=B6=
:</p><div class=3D"highlight-wrapper"><div class=3D"highlight"><button clas=
s=3D"copy-button" type=3D"button" aria-label=3D"Copy">Copy</button><pre tab=
index=3D"0" class=3D"chroma"><code class=3D"language-ts" data-lang=3D"ts"><=
span class=3D"line"><span class=3D"cl"><span class=3D"c1">// hello_pb.d.ts
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"c1">// =E7=94=9F=E6=88=90=E5=87=BA=E6=9D=A5=E7=9A=84 message =E7=B1=BB=E5=
=9E=8B
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"c1"></span><span class=3D"kr">export</span> <span class=3D"kr">class</span=
> <span class=3D"nx">EchoRequest</span> <span class=3D"kr">extends</span> <=
span class=3D"nx">jspb</span><span class=3D"p">.</span><span class=3D"nx">M=
essage</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
getMessage</span><span class=3D"p">()</span><span class=3D"o">:</span> <spa=
n class=3D"kt">string</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
setMessage</span><span class=3D"p">(</span><span class=3D"nx">value</span>:=
 <span class=3D"kt">string</span><span class=3D"p">)</span><span class=3D"o=
">:</span> <span class=3D"k">void</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
serializeBinary</span><span class=3D"p">()</span><span class=3D"o">:</span>=
 <span class=3D"nx">Uint8Array</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
toObject</span><span class=3D"p">(</span><span class=3D"nx">includeInstance=
?</span>: <span class=3D"kt">boolean</span><span class=3D"p">)</span><span =
class=3D"o">:</span> <span class=3D"nx">EchoRequest</span><span class=3D"p"=
>.</span><span class=3D"nx">AsObject</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"c1">=
// ... =E5=BF=BD=E7=95=A5=E4=B8=80=E4=BA=9B=E5=88=AB=E7=9A=84=E6=96=B9=E6=
=B3=95
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"c1"></span><span class=3D"p">}</span>
</span></span></code></pre></div></div><div class=3D"highlight-wrapper"><di=
v class=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-la=
bel=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=
=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><=
span class=3D"c1">// hello_grpc_pb.d.ts
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"c1">// server =E9=9C=80=E8=A6=81=E5=AE=9E=E7=8E=B0=E7=9A=84=E6=8E=A5=E5=8F=
=A3
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"c1"></span><span class=3D"kr">export</span> <span class=3D"kr">interface</=
span> <span class=3D"nx">IHelloServer</span> <span class=3D"kr">extends</sp=
an> <span class=3D"nx">grpc</span><span class=3D"p">.</span><span class=3D"=
nx">UntypedServiceImplementation</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
echo</span>: <span class=3D"kt">grpc.handleUnaryCall</span><span class=3D"p=
">&lt;</span><span class=3D"nt">hello_pb.EchoRequest</span><span class=3D"e=
rr">,</span> <span class=3D"na">hello_pb.EchoRequest</span><span class=3D"p=
">&gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
serverStream</span>: <span class=3D"kt">grpc.handleServerStreamingCall</spa=
n><span class=3D"o">&lt;</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">hello_pb</span><span class=3D"p">.</span><span class=3D"nx">EchoRequest</=
span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">hello_pb</span><span class=3D"p">.</span><span class=3D"nx">EchoRequest</=
span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"o">&=
gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
clientStream</span>: <span class=3D"kt">grpc.handleClientStreamingCall</spa=
n><span class=3D"o">&lt;</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">hello_pb</span><span class=3D"p">.</span><span class=3D"nx">EchoRequest</=
span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">hello_pb</span><span class=3D"p">.</span><span class=3D"nx">EchoRequest</=
span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"o">&=
gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
duplexStream</span>: <span class=3D"kt">grpc.handleBidiStreamingCall</span>=
<span class=3D"o">&lt;</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">hello_pb</span><span class=3D"p">.</span><span class=3D"nx">EchoRequest</=
span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">hello_pb</span><span class=3D"p">.</span><span class=3D"nx">EchoRequest</=
span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"o">&=
gt;</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"c1">//=
 client =E7=B1=BB=E5=9E=8B, =E7=9C=81=E7=95=A5=E6=8E=89=E4=B8=80=E4=BA=9B=
=E9=87=8D=E8=BD=BD=E6=96=B9=E6=B3=95
</span></span></span><span class=3D"line"><span class=3D"cl"><span class=3D=
"c1"></span><span class=3D"kr">export</span> <span class=3D"kr">class</span=
> <span class=3D"nx">HelloClient</span> <span class=3D"kr">extends</span> <=
span class=3D"nx">grpc</span><span class=3D"p">.</span><span class=3D"nx">C=
lient</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
constructor</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">address</span>: <span class=3D"kt">string</span><span class=3D"p">,</span=
>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">credentials</span>: <span class=3D"kt">grpc.ChannelCredentials</span><spa=
n class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">options?</span>: <span class=3D"kt">object</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
echo</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">argument</span>: <span class=3D"kt">hello_pb.EchoRequest</span><span clas=
s=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">metadata</span>: <span class=3D"kt">grpc.Metadata</span> <span class=3D"o=
">|</span> <span class=3D"kc">null</span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">options</span>: <span class=3D"kt">grpc.CallOptions</span> <span class=3D=
"o">|</span> <span class=3D"kc">null</span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">callback</span>: <span class=3D"kt">grpc.requestCallback</span><span clas=
s=3D"p">&lt;</span><span class=3D"nt">hello_pb.EchoRequest</span><span clas=
s=3D"p">&gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span><span class=3D"o">:</span> <span class=3D"nx">grpc</span><span class=
=3D"p">.</span><span class=3D"nx">ClientUnaryCall</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
serverStream</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">argument</span>: <span class=3D"kt">hello_pb.EchoRequest</span><span clas=
s=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">metadata?</span>: <span class=3D"kt">grpc.Metadata</span> <span class=3D"=
o">|</span> <span class=3D"kc">null</span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">options?</span>: <span class=3D"kt">grpc.CallOptions</span> <span class=
=3D"o">|</span> <span class=3D"kc">null</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span><span class=3D"o">:</span> <span class=3D"nx">grpc</span><span class=
=3D"p">.</span><span class=3D"nx">ClientReadableStream</span><span class=3D=
"p">&lt;</span><span class=3D"nt">hello_pb.EchoRequest</span><span class=3D=
"p">&gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
clientStream</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">metadata</span>: <span class=3D"kt">grpc.Metadata</span> <span class=3D"o=
">|</span> <span class=3D"kc">null</span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">options</span>: <span class=3D"kt">grpc.CallOptions</span> <span class=3D=
"o">|</span> <span class=3D"kc">null</span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">callback</span>: <span class=3D"kt">grpc.requestCallback</span><span clas=
s=3D"p">&lt;</span><span class=3D"nt">hello_pb.EchoRequest</span><span clas=
s=3D"p">&gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span><span class=3D"o">:</span> <span class=3D"nx">grpc</span><span class=
=3D"p">.</span><span class=3D"nx">ClientWritableStream</span><span class=3D=
"p">&lt;</span><span class=3D"nt">hello_pb.EchoRequest</span><span class=3D=
"p">&gt;</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
duplexStream</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">metadata?</span>: <span class=3D"kt">grpc.Metadata</span> <span class=3D"=
o">|</span> <span class=3D"kc">null</span><span class=3D"p">,</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">options?</span>: <span class=3D"kt">grpc.CallOptions</span> <span class=
=3D"o">|</span> <span class=3D"kc">null</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span><span class=3D"o">:</span> <span class=3D"nx">grpc</span><span class=
=3D"p">.</span><span class=3D"nx">ClientDuplexStream</span><span class=3D"p=
">&lt;</span><span class=3D"nt">hello_pb.EchoRequest</span><span class=3D"e=
rr">,</span> <span class=3D"na">hello_pb.EchoRequest</span><span class=3D"p=
">&gt;</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><h2 id=3D"grpc-rpc-=E7=B1=BB=E5=9E=
=8B" class=3D"relative group">grpc rpc =E7=B1=BB=E5=9E=8B <span class=3D"ab=
solute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-=
prose group-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dar=
k:group-hover:text-neutral-700" style=3D"text-decoration-line:none!importan=
t" href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#grpc-r=
pc-%e7%b1%bb%e5%9e%8b" aria-label=3D"Anchor">#</a></span></h2><p>=E4=B8=80=
=E8=88=AC rpc =E5=8F=AA=E6=94=AF=E6=8C=81=E4=B8=80=E5=BA=94=E4=B8=80=E7=AD=
=94=E5=BC=8F=E7=9A=84=E8=AF=B7=E6=B1=82=E5=93=8D=E5=BA=94, grpc =E4=B9=9F=
=E6=94=AF=E6=8C=81 stream, =E6=89=80=E4=BB=A5=E6=9C=89=E4=BB=A5=E4=B8=8B=E5=
=9B=9B=E7=A7=8D=E7=B1=BB=E5=9E=8B:</p><ol><li>=E4=B8=80=E5=BA=94=E4=B8=80=
=E7=AD=94</li><li>server =E7=AB=AF=E6=B5=81</li><li>client =E7=AB=AF=E6=B5=
=81</li><li>=E5=8F=8C=E5=90=91=E6=B5=81</li></ol><p>grpc =E7=9A=84=E6=B5=81=
=E5=AF=B9=E5=BA=94 nodejs =E4=B8=AD=E7=9A=84=E6=B5=81, =E4=BD=BF=E7=94=A8 <=
code>on('data')</code> =E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE; =E8=80=8C=E5=
=8D=95=E6=9D=A1=E5=93=8D=E5=BA=94=E5=88=99=E6=98=AF=E4=BD=BF=E7=94=A8 <code=
>callback</code> =E5=BD=A2=E5=BC=8F. =E4=BD=86=E6=98=AF=E5=AF=B9=E4=BA=8E=
=E7=8E=B0=E4=BB=A3=E7=9A=84 js =E8=AF=AD=E8=A8=80, callback =E6=98=AF=E5=BE=
=88=E5=80=92=E9=80=80=E7=9A=84, =E4=B8=80=E8=88=AC=E4=BC=9A=E4=BC=98=E5=8C=
=96=E4=B8=BA promise, =E8=80=8C=E6=B5=81=E4=B8=80=E8=88=AC=E6=98=AF=E4=B8=
=BA=E4=BA=86=E5=81=9A=E6=B5=81=E5=BC=8F=E5=A4=84=E7=90=86=E6=8F=90=E9=AB=98=
=E6=95=88=E7=8E=87, =E5=A6=82=E6=9E=9C=E7=AE=80=E5=8D=95=E4=BC=98=E5=8C=96=
=E4=B8=BA=E6=94=B6=E5=88=B0=E6=89=80=E6=9C=89=E6=95=B0=E6=8D=AE=E4=B8=80=E8=
=B5=B7=E8=BF=94=E5=9B=9E=E7=9A=84 promise =E5=B0=B1=E8=83=8C=E7=A6=BB=E4=BA=
=86 stream =E7=9A=84=E5=88=9D=E8=A1=B7, =E6=88=91=E4=BB=AC=E5=8F=AF=E4=BB=
=A5=E9=80=9A=E8=BF=87 <a href=3D"https://github.com/reactivex/rxjs" target=
=3D"_blank" rel=3D"noreferrer noopener">rxjs</a> =E5=B0=86=E6=B5=81=E8=BD=
=AC=E5=8C=96=E6=88=90 <code>Observer</code> =E5=B0=B1=E8=83=BD=E4=BD=BF=E7=
=94=A8 rxjs =E4=B8=B0=E5=AF=8C=E7=9A=84 API =E6=9D=A5=E6=93=8D=E4=BD=9C=E6=
=B5=81=E4=BA=86. =E6=88=91=E5=86=99=E4=BA=86=E4=B8=80=E4=B8=AA=E5=B7=A5=E5=
=85=B7=E5=BA=93 <a href=3D"https://github.com/zcong1993/ts-grpc-helper" tar=
get=3D"_blank" rel=3D"noreferrer noopener">zcong1993/ts-grpc-helper</a>. =
=E4=B8=8B=E6=96=87=E4=BC=9A=E5=AF=B9=E6=AF=94=E4=B8=A4=E7=A7=8D=E6=96=B9=E5=
=BC=8F=E7=9A=84=E4=BB=A3=E7=A0=81.</p><h3 id=3D"1-=E4=B8=80=E5=BA=94=E4=B8=
=80=E7=AD=94" class=3D"relative group">1. =E4=B8=80=E5=BA=94=E4=B8=80=E7=AD=
=94 <span class=3D"absolute top-0 w-6 transition-opacity opacity-0 ltr:-lef=
t-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class=3D"group-hover=
:text-primary-300 dark:group-hover:text-neutral-700" style=3D"text-decorati=
on-line:none!important" href=3D"https://blog.cong.moe/post/2021-03-16-grpc-=
on-typescript/#1-%e4%b8%80%e5%ba%94%e4%b8%80%e7%ad%94" aria-label=3D"Anchor=
">#</a></span></h3><p><code>rpc Echo(EchoRequest) returns (EchoRequest);</c=
ode></p><h4 id=3D"server-=E7=AB=AF" class=3D"relative group">server =E7=AB=
=AF <span class=3D"absolute top-0 w-6 transition-opacity opacity-0 ltr:-lef=
t-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class=3D"group-hover=
:text-primary-300 dark:group-hover:text-neutral-700" style=3D"text-decorati=
on-line:none!important" href=3D"https://blog.cong.moe/post/2021-03-16-grpc-=
on-typescript/#server-%e7%ab%af" aria-label=3D"Anchor">#</a></span></h4><p>=
=E7=AE=80=E5=8D=95 echo =E6=9C=8D=E5=8A=A1, =E5=B0=86 request =E7=9B=B4=E6=
=8E=A5=E8=BF=94=E5=9B=9E</p><div class=3D"highlight-wrapper"><div class=3D"=
highlight"><button class=3D"copy-button" type=3D"button" aria-label=3D"Copy=
">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"language=
-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><span class=
=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
echo</span><span class=3D"o">:</span> <span class=3D"p">(</span><span class=
=3D"nx">call</span><span class=3D"p">,</span> <span class=3D"nx">callback</=
span><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span clas=
s=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">call</span><span class=3D"p">.</sp=
an><span class=3D"nx">request</span><span class=3D"p">.</span><span class=
=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">callback</span><span class=3D"p">(</span><span class=3D"kc">null</span><s=
pan class=3D"p">,</span> <span class=3D"nx">call</span><span class=3D"p">.<=
/span><span class=3D"nx">request</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>callback =E7=89=88=E6=9C=AC=E4=B8=
=8D=E5=81=9A=E8=AF=B4=E6=98=8E.</p><div class=3D"highlight-wrapper"><div cl=
ass=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-label=
=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"=
language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><span=
 class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
echo</span>: <span class=3D"kt">toHandleUnaryCall</span><span class=3D"p">(=
</span><span class=3D"kr">async</span> <span class=3D"p">(</span><span clas=
s=3D"nx">req</span><span class=3D"p">,</span> <span class=3D"nx">md</span><=
span class=3D"p">,</span> <span class=3D"nx">call</span><span class=3D"p">)=
</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">req</span><span class=3D"p">.</spa=
n><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>return</span> <span class=3D"nx">req</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
),</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E4=BD=BF=E7=94=A8 helper =E6=96=
=B9=E6=B3=95=E5=8C=85=E8=A3=85=E5=90=8E, =E4=BB=85=E9=9C=80=E8=A6=81=E5=B0=
=86 response =E8=BF=94=E5=9B=9E=E5=8D=B3=E5=8F=AF.</p><h4 id=3D"client-=E7=
=AB=AF" class=3D"relative group">client =E7=AB=AF <span class=3D"absolute t=
op-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose gr=
oup-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dark:group-=
hover:text-neutral-700" style=3D"text-decoration-line:none!important" href=
=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#client-%e7%ab=
%af" aria-label=3D"Anchor">#</a></span></h4><div class=3D"highlight-wrapper=
"><div class=3D"highlight"><button class=3D"copy-button" type=3D"button" ar=
ia-label=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code c=
lass=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"c=
l"><span class=3D"kr">const</span> <span class=3D"nx">testEcho</span> <span=
 class=3D"o">=3D</span> <span class=3D"kr">async</span> <span class=3D"p">(=
</span><span class=3D"nx">c</span>: <span class=3D"kt">HelloClient</span><s=
pan class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p"=
>{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span> <sp=
an class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p">.</=
span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span><sp=
an class=3D"p">(</span><span class=3D"s1">'test'</span><span class=3D"p">)<=
/span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
c</span><span class=3D"p">.</span><span class=3D"nx">echo</span><span class=
=3D"p">(</span><span class=3D"nx">req</span><span class=3D"p">,</span> <spa=
n class=3D"p">(</span><span class=3D"nx">err</span><span class=3D"p">,</spa=
n> <span class=3D"nx">data</span><span class=3D"p">)</span> <span class=3D"=
o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>if</span> <span class=3D"p">(</span><span class=3D"nx">err</span><span cla=
ss=3D"p">)</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"s1">'err: '</span><span class=3D"p">=
,</span> <span class=3D"nx">err</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span> <span class=3D"k">else</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">.</=
span><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><div class=3D"highlight-wrapper"><di=
v class=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-la=
bel=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=
=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><=
span class=3D"kr">const</span> <span class=3D"nx">testEcho</span> <span cla=
ss=3D"o">=3D</span> <span class=3D"kr">async</span> <span class=3D"p">(</sp=
an><span class=3D"nx">c</span>: <span class=3D"kt">HelloClient</span><span =
class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</=
span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span> <sp=
an class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p">.</=
span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span><sp=
an class=3D"p">(</span><span class=3D"s1">'test'</span><span class=3D"p">)<=
/span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">resp</span> <span class=3D"o">=3D</span> <s=
pan class=3D"k">await</span> <span class=3D"nx">promisifyUnaryCall</span><s=
pan class=3D"p">(</span><span class=3D"nx">c</span><span class=3D"p">.</spa=
n><span class=3D"nx">echo</span><span class=3D"p">,</span> <span class=3D"n=
x">c</span><span class=3D"p">)(</span><span class=3D"nx">req</span><span cl=
ass=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
console</span><span class=3D"p">.</span><span class=3D"nx">log</span><span =
class=3D"p">(</span><span class=3D"nx">resp</span><span class=3D"p">.</span=
><span class=3D"nx">res</span><span class=3D"p">.</span><span class=3D"nx">=
toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>client =E7=AB=AF=E5=90=8C=E7=90=
=86, =E5=8C=85=E8=A3=85=E4=B9=8B=E5=90=8E=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=
=A8=E5=BC=82=E6=AD=A5.</p><h3 id=3D"2-server-=E7=AB=AF=E6=B5=81" class=3D"r=
elative group">2. server =E7=AB=AF=E6=B5=81 <span class=3D"absolute top-0 w=
-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-ho=
ver:opacity-100"><a class=3D"group-hover:text-primary-300 dark:group-hover:=
text-neutral-700" style=3D"text-decoration-line:none!important" href=3D"htt=
ps://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#2-server-%e7%ab%af%e=
6%b5%81" aria-label=3D"Anchor">#</a></span></h3><p><code>rpc ServerStream(E=
choRequest) returns (stream EchoRequest);</code> =E6=8E=A5=E6=94=B6=E4=B8=
=80=E4=B8=AA=E8=AF=B7=E6=B1=82, =E8=BF=94=E5=9B=9E=E4=B8=80=E4=B8=AA=E6=B5=
=81.</p><h4 id=3D"server-=E7=AB=AF-1" class=3D"relative group">server =E7=
=AB=AF <span class=3D"absolute top-0 w-6 transition-opacity opacity-0 ltr:-=
left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class=3D"group-ho=
ver:text-primary-300 dark:group-hover:text-neutral-700" style=3D"text-decor=
ation-line:none!important" href=3D"https://blog.cong.moe/post/2021-03-16-gr=
pc-on-typescript/#server-%e7%ab%af-1" aria-label=3D"Anchor">#</a></span></h=
4><p>=E7=AE=80=E5=8D=95 echo =E6=9C=8D=E5=8A=A1, =E8=BF=94=E5=9B=9E=E6=B5=
=81=E5=8F=91=E9=80=81=E4=B8=89=E6=AC=A1=E6=94=B6=E5=88=B0=E7=9A=84 request.=
</p><div class=3D"highlight-wrapper"><div class=3D"highlight"><button class=
=3D"copy-button" type=3D"button" aria-label=3D"Copy">Copy</button><pre tabi=
ndex=3D"0" class=3D"chroma"><code class=3D"language-ts" data-lang=3D"ts"><s=
pan class=3D"line"><span class=3D"cl"><span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
serverStream</span><span class=3D"o">:</span> <span class=3D"p">(</span><sp=
an class=3D"nx">call</span><span class=3D"p">)</span> <span class=3D"o">=3D=
&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">call</span><span class=3D"p">.</sp=
an><span class=3D"nx">request</span><span class=3D"p">.</span><span class=
=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nb=
">Array</span><span class=3D"p">(</span><span class=3D"mi">3</span><span cl=
ass=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
p">.</span><span class=3D"nx">fill</span><span class=3D"p">(</span><span cl=
ass=3D"nx">call</span><span class=3D"p">.</span><span class=3D"nx">request<=
/span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
p">.</span><span class=3D"nx">map</span><span class=3D"p">((</span><span cl=
ass=3D"nx">r</span><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</sp=
an> <span class=3D"nx">call</span><span class=3D"p">.</span><span class=3D"=
nx">write</span><span class=3D"p">(</span><span class=3D"nx">r</span><span =
class=3D"p">))</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">end</span><span c=
lass=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
,</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E9=80=9A=E8=BF=87=E5=A4=9A=E6=AC=
=A1=E8=B0=83=E7=94=A8 <code>call.write()</code> =E5=8F=91=E9=80=81=E5=A4=9A=
=E4=B8=AA chunk data.</p><div class=3D"highlight-wrapper"><div class=3D"hig=
hlight"><button class=3D"copy-button" type=3D"button" aria-label=3D"Copy">C=
opy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"language-ts=
" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><span class=3D"p=
">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
serverStream</span>: <span class=3D"kt">toHandleServerStreamingCall</span><=
span class=3D"p">(</span><span class=3D"kr">async</span> <span class=3D"p">=
(</span><span class=3D"nx">req</span><span class=3D"p">,</span> <span class=
=3D"nx">md</span><span class=3D"p">,</span> <span class=3D"nx">call</span><=
span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p=
">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">req</span><span class=3D"p">.</spa=
n><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>return</span> <span class=3D"kr">from</span><span class=3D"p">(</span><spa=
n class=3D"nb">Array</span><span class=3D"p">(</span><span class=3D"mi">3</=
span><span class=3D"p">).</span><span class=3D"nx">fill</span><span class=
=3D"p">(</span><span class=3D"nx">req</span><span class=3D"p">))</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
),</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E7=9B=B4=E6=8E=A5=E8=BF=94=E5=9B=
=9E <code>Observable</code> =E5=8D=B3=E5=8F=AF.</p><h4 id=3D"client-=E7=AB=
=AF-1" class=3D"relative group">client =E7=AB=AF <span class=3D"absolute to=
p-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose gro=
up-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dark:group-h=
over:text-neutral-700" style=3D"text-decoration-line:none!important" href=
=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#client-%e7%ab=
%af-1" aria-label=3D"Anchor">#</a></span></h4><div class=3D"highlight-wrapp=
er"><div class=3D"highlight"><button class=3D"copy-button" type=3D"button" =
aria-label=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code=
 class=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D=
"cl"><span class=3D"kr">const</span> <span class=3D"nx">testStream</span> <=
span class=3D"o">=3D</span> <span class=3D"kr">async</span> <span class=3D"=
p">(</span><span class=3D"nx">c</span>: <span class=3D"kt">HelloClient</spa=
n><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=
=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span> <sp=
an class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p">.</=
span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span><sp=
an class=3D"p">(</span><span class=3D"s1">'test2'</span><span class=3D"p">)=
</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">st</span> <span class=3D"o">=3D</span> <spa=
n class=3D"nx">c</span><span class=3D"p">.</span><span class=3D"nx">serverS=
tream</span><span class=3D"p">(</span><span class=3D"nx">req</span><span cl=
ass=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
st</span><span class=3D"p">.</span><span class=3D"nx">on</span><span class=
=3D"p">(</span><span class=3D"s1">'data'</span><span class=3D"p">,</span> <=
span class=3D"p">(</span><span class=3D"nx">d</span><span class=3D"p">)</sp=
an> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">d</span><span class=3D"p">.</span>=
<span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
st</span><span class=3D"p">.</span><span class=3D"nx">on</span><span class=
=3D"p">(</span><span class=3D"s1">'end'</span><span class=3D"p">,</span> <s=
pan class=3D"p">()</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p=
">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"s1">'done'</span><span class=3D"p">)</=
span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
st</span><span class=3D"p">.</span><span class=3D"nx">on</span><span class=
=3D"p">(</span><span class=3D"s1">'error'</span><span class=3D"p">,</span> =
<span class=3D"p">(</span><span class=3D"nx">err</span><span class=3D"p">)<=
/span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"s1">'error'</span><span class=3D"p">,<=
/span> <span class=3D"nx">err</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E5=8F=91=E9=80=81=E8=AF=B7=E6=B1=
=82, =E8=BF=94=E5=9B=9E=E4=B8=80=E4=B8=AA=E7=B1=BB=E4=BC=BC <code>readstrea=
m</code>.</p><div class=3D"highlight-wrapper"><div class=3D"highlight"><but=
ton class=3D"copy-button" type=3D"button" aria-label=3D"Copy">Copy</button>=
<pre tabindex=3D"0" class=3D"chroma"><code class=3D"language-ts" data-lang=
=3D"ts"><span class=3D"line"><span class=3D"cl"><span class=3D"kr">const</s=
pan> <span class=3D"nx">testStream</span> <span class=3D"o">=3D</span> <spa=
n class=3D"kr">async</span> <span class=3D"p">(</span><span class=3D"nx">c<=
/span>: <span class=3D"kt">HelloClient</span><span class=3D"p">)</span> <sp=
an class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span> <sp=
an class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p">.</=
span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span><sp=
an class=3D"p">(</span><span class=3D"s1">'test2'</span><span class=3D"p">)=
</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">st</span> <span class=3D"o">=3D</span> <spa=
n class=3D"nx">c</span><span class=3D"p">.</span><span class=3D"nx">serverS=
tream</span><span class=3D"p">(</span><span class=3D"nx">req</span><span cl=
ass=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">result$</span> <span class=3D"o">=3D</span>=
 <span class=3D"nx">readStreamToObserver</span><span class=3D"p">(</span><s=
pan class=3D"nx">st</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"k">a=
wait</span> <span class=3D"nx">result$</span><span class=3D"p">.</span><spa=
n class=3D"nx">forEach</span><span class=3D"p">((</span><span class=3D"nx">=
data</span><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <spa=
n class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">.</sp=
an><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E4=BD=BF=E7=94=A8 <code>readStre=
amToObserver()</code> =E6=96=B9=E6=B3=95=E5=B0=86=E8=BF=94=E5=9B=9E=E6=B5=
=81=E8=BD=AC=E5=8C=96=E4=B8=BA <code>Observable</code>.</p><h3 id=3D"3-clie=
nt-=E7=AB=AF=E6=B5=81" class=3D"relative group">3. client =E7=AB=AF=E6=B5=
=81 <span class=3D"absolute top-0 w-6 transition-opacity opacity-0 ltr:-lef=
t-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class=3D"group-hover=
:text-primary-300 dark:group-hover:text-neutral-700" style=3D"text-decorati=
on-line:none!important" href=3D"https://blog.cong.moe/post/2021-03-16-grpc-=
on-typescript/#3-client-%e7%ab%af%e6%b5%81" aria-label=3D"Anchor">#</a></sp=
an></h3><p><code>rpc ClientStream(stream EchoRequest) returns (EchoRequest)=
;</code> =E6=8E=A5=E6=94=B6=E4=B8=80=E4=B8=AA=E6=B5=81, =E8=BF=94=E5=9B=9E=
=E4=B8=80=E4=B8=AA=E6=99=AE=E9=80=9A=E5=93=8D=E5=BA=94.</p><h4 id=3D"server=
-=E7=AB=AF-2" class=3D"relative group">server =E7=AB=AF <span class=3D"abso=
lute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-pr=
ose group-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dark:=
group-hover:text-neutral-700" style=3D"text-decoration-line:none!important"=
 href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#server-%=
e7%ab%af-2" aria-label=3D"Anchor">#</a></span></h4><p>=E6=8E=A5=E6=94=B6 re=
quest =E6=B5=81, =E7=BB=93=E6=9D=9F=E5=90=8E=E5=8F=91=E9=80=81=E6=9C=80=E5=
=90=8E=E4=B8=80=E4=B8=AA chunk.</p><div class=3D"highlight-wrapper"><div cl=
ass=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-label=
=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"=
language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><span=
 class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
clientStream</span><span class=3D"o">:</span> <span class=3D"p">(</span><sp=
an class=3D"nx">call</span><span class=3D"p">,</span> <span class=3D"nx">ca=
llback</span><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <s=
pan class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"kd=
">let</span> <span class=3D"nx">d</span>: <span class=3D"kt">any</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span cl=
ass=3D"p">(</span><span class=3D"s1">'data'</span><span class=3D"p">,</span=
> <span class=3D"p">(</span><span class=3D"nx">dd</span><span class=3D"p">)=
</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">dd</span><span class=3D"p">.</sp=
an><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">d</span> <span class=3D"o">=3D</span> <span class=3D"nx">dd</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span cl=
ass=3D"p">(</span><span class=3D"s1">'error'</span><span class=3D"p">,</spa=
n> <span class=3D"p">(</span><span class=3D"nx">err</span><span class=3D"p"=
>)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">callback</span><span class=3D"p">(</span><span class=3D"nx">err</span><=
span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span cl=
ass=3D"p">(</span><span class=3D"s1">'end'</span><span class=3D"p">,</span>=
 <span class=3D"p">()</span> <span class=3D"o">=3D&gt;</span> <span class=
=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">callback</span><span class=3D"p">(</span><span class=3D"kc">null</span>=
<span class=3D"p">,</span> <span class=3D"nx">d</span><span class=3D"p">)</=
span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
,</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E9=9C=80=E8=A6=81=E4=BD=BF=E7=94=
=A8 <code>on('data')</code> =E6=8E=A5=E6=94=B6=E6=B6=88=E6=81=AF, =E5=B9=B6=
=E4=B8=94 <code>on('end')</code> =E6=97=B6=E8=B0=83=E7=94=A8 callback =E8=
=BF=94=E5=9B=9E=E5=93=8D=E5=BA=94.</p><div class=3D"highlight-wrapper"><div=
 class=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-lab=
el=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=
=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><=
span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
clientStream</span>: <span class=3D"kt">toHandleClientStreamingCall</span><=
span class=3D"p">(</span><span class=3D"kr">async</span> <span class=3D"p">=
(</span><span class=3D"nx">req</span><span class=3D"p">,</span> <span class=
=3D"nx">md</span><span class=3D"p">,</span> <span class=3D"nx">call</span><=
span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p=
">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"kd=
">let</span> <span class=3D"nx">res</span>: <span class=3D"kt">hello_pb.Ech=
oRequest</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>await</span> <span class=3D"nx">req</span><span class=3D"p">.</span><span =
class=3D"nx">forEach</span><span class=3D"p">((</span><span class=3D"nx">da=
ta</span><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span =
class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">res</span> <span class=3D"o">=3D</span> <span class=3D"nx">data</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">.</=
span><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>return</span> <span class=3D"nx">res</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
),</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>request =E5=8F=98=E6=88=90=E4=BA=
=86 <code>Observable</code>, =E5=B9=B6=E4=B8=94=E5=8F=AA=E9=9C=80=E8=A6=81=
=E5=B0=86 response =E4=BD=9C=E4=B8=BA=E8=BF=94=E5=9B=9E=E5=80=BC=E8=BF=94=
=E5=9B=9E=E5=8D=B3=E5=8F=AF.</p><h4 id=3D"client-=E7=AB=AF-2" class=3D"rela=
tive group">client =E7=AB=AF <span class=3D"absolute top-0 w-6 transition-o=
pacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100=
"><a class=3D"group-hover:text-primary-300 dark:group-hover:text-neutral-70=
0" style=3D"text-decoration-line:none!important" href=3D"https://blog.cong.=
moe/post/2021-03-16-grpc-on-typescript/#client-%e7%ab%af-2" aria-label=3D"A=
nchor">#</a></span></h4><p>=E8=AF=B7=E6=B1=82=E6=B5=81=E5=8F=91=E9=80=81 5 =
=E6=9D=A1=E6=95=B0=E6=8D=AE <code>test 0</code> =E5=88=B0 <code>test 4</cod=
e>.</p><div class=3D"highlight-wrapper"><div class=3D"highlight"><button cl=
ass=3D"copy-button" type=3D"button" aria-label=3D"Copy">Copy</button><pre t=
abindex=3D"0" class=3D"chroma"><code class=3D"language-ts" data-lang=3D"ts"=
><span class=3D"line"><span class=3D"cl"><span class=3D"kr">const</span> <s=
pan class=3D"nx">testClientStream</span> <span class=3D"o">=3D</span> <span=
 class=3D"kr">async</span> <span class=3D"p">(</span><span class=3D"nx">c</=
span>: <span class=3D"kt">HelloClient</span><span class=3D"p">)</span> <spa=
n class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">call</span> <span class=3D"o">=3D</span> <s=
pan class=3D"nx">c</span><span class=3D"p">.</span><span class=3D"nx">clien=
tStream</span><span class=3D"p">((</span><span class=3D"nx">err</span><span=
 class=3D"p">,</span> <span class=3D"nx">resp</span><span class=3D"p">)</sp=
an> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>if</span> <span class=3D"p">(</span><span class=3D"nx">err</span><span cla=
ss=3D"p">)</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">err</span><span class=3D"p">)</s=
pan>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span> <span class=3D"k">else</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">resp</span><span class=3D"p">)</=
span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nb">=
Array</span><span class=3D"p">(</span><span class=3D"mi">5</span><span clas=
s=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>.</span><span class=3D"nx">fill</span><span class=3D"p">(</span><span clas=
s=3D"kc">null</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>.</span><span class=3D"nx">forEach</span><span class=3D"p">((</span><span =
class=3D"nx">_</span><span class=3D"p">,</span> <span class=3D"nx">i</span>=
<span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"=
p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
kr">const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span>=
 <span class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p"=
>.</span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span=
><span class=3D"p">(</span><span class=3D"sb">`test </span><span class=3D"s=
i">${</span><span class=3D"nx">i</span><span class=3D"si">}</span><span cla=
ss=3D"sb">`</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">call</span><span class=3D"p">.</span><span class=3D"nx">write</span><sp=
an class=3D"p">(</span><span class=3D"nx">req</span><span class=3D"p">)</sp=
an>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
call</span><span class=3D"p">.</span><span class=3D"nx">end</span><span cla=
ss=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><div class=3D"highlight-wrapper"><di=
v class=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-la=
bel=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=
=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><=
span class=3D"kr">const</span> <span class=3D"nx">testClientStream</span> <=
span class=3D"o">=3D</span> <span class=3D"kr">async</span> <span class=3D"=
p">(</span><span class=3D"nx">c</span>: <span class=3D"kt">HelloClient</spa=
n><span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=
=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">call</span> <span class=3D"o">=3D</span> <s=
pan class=3D"nx">c</span><span class=3D"p">.</span><span class=3D"nx">clien=
tStream</span><span class=3D"p">((</span><span class=3D"nx">err</span><span=
 class=3D"p">,</span> <span class=3D"nx">resp</span><span class=3D"p">)</sp=
an> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>if</span> <span class=3D"p">(</span><span class=3D"nx">err</span><span cla=
ss=3D"p">)</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">err</span><span class=3D"p">)</s=
pan>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span> <span class=3D"k">else</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">resp</span><span class=3D"p">.</=
span><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
observerToWriteStream</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">range</span><span class=3D"p">(</span><span class=3D"mi">0</span><span cl=
ass=3D"p">,</span> <span class=3D"mi">5</span><span class=3D"p">).</span><s=
pan class=3D"nx">pipe</span><span class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">map</span><span class=3D"p">((</span><span class=3D"nx">val</span><span=
 class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{<=
/span>
</span></span><span class=3D"line"><span class=3D"cl">        <span class=
=3D"kr">const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</s=
pan> <span class=3D"k">new</span> <span class=3D"nx">pb</span><span class=
=3D"p">.</span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</s=
pan>
</span></span><span class=3D"line"><span class=3D"cl">        <span class=
=3D"nx">req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</=
span><span class=3D"p">(</span><span class=3D"sb">`test </span><span class=
=3D"si">${</span><span class=3D"nx">val</span><span class=3D"si">}</span><s=
pan class=3D"sb">`</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">        <span class=
=3D"k">return</span> <span class=3D"nx">req</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
p">})</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>),</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E8=B0=83=E7=94=A8 <code>observer=
ToWriteStream()</code> =E6=96=B9=E6=B3=95=E5=B0=86 <code>Observable</code> =
=E8=BD=AC=E5=8C=96=E6=88=90=E9=9C=80=E8=A6=81=E7=9A=84 <code>writeStream</c=
ode>, callback =E5=93=8D=E5=BA=94=E6=9A=82=E6=9C=AA=E5=A4=84=E7=90=86.</p><=
h3 id=3D"4-=E5=8F=8C=E5=90=91=E6=B5=81" class=3D"relative group">4. =E5=8F=
=8C=E5=90=91=E6=B5=81 <span class=3D"absolute top-0 w-6 transition-opacity =
opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a cl=
ass=3D"group-hover:text-primary-300 dark:group-hover:text-neutral-700" styl=
e=3D"text-decoration-line:none!important" href=3D"https://blog.cong.moe/pos=
t/2021-03-16-grpc-on-typescript/#4-%e5%8f%8c%e5%90%91%e6%b5%81" aria-label=
=3D"Anchor">#</a></span></h3><p><code>rpc DuplexStream(stream EchoRequest) =
returns (stream EchoRequest);</code> =E6=8E=A5=E6=94=B6=E4=B8=80=E4=B8=AA=
=E6=B5=81=E8=BF=94=E5=9B=9E=E4=B8=80=E4=B8=AA=E6=B5=81.</p><h4 id=3D"server=
-=E7=AB=AF-3" class=3D"relative group">server =E7=AB=AF <span class=3D"abso=
lute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-pr=
ose group-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dark:=
group-hover:text-neutral-700" style=3D"text-decoration-line:none!important"=
 href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#server-%=
e7%ab%af-3" aria-label=3D"Anchor">#</a></span></h4><p>=E5=B0=86=E8=AF=B7=E6=
=B1=82=E6=B5=81=E8=BD=AC=E5=8F=91=E5=9B=9E=E5=8E=BB.</p><div class=3D"highl=
ight-wrapper"><div class=3D"highlight"><button class=3D"copy-button" type=
=3D"button" aria-label=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"c=
hroma"><code class=3D"language-ts" data-lang=3D"ts"><span class=3D"line"><s=
pan class=3D"cl"><span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
duplexStream</span><span class=3D"o">:</span> <span class=3D"p">(</span><sp=
an class=3D"nx">call</span><span class=3D"p">)</span> <span class=3D"o">=3D=
&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span cl=
ass=3D"p">(</span><span class=3D"s1">'error'</span><span class=3D"p">,</spa=
n> <span class=3D"p">(</span><span class=3D"nx">err</span><span class=3D"p"=
>)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">call</span><span class=3D"p">.</span><span class=3D"nx">emit</span><spa=
n class=3D"p">(</span><span class=3D"s1">'error'</span><span class=3D"p">,<=
/span> <span class=3D"nx">err</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span cl=
ass=3D"p">(</span><span class=3D"s1">'end'</span><span class=3D"p">,</span>=
 <span class=3D"p">()</span> <span class=3D"o">=3D&gt;</span> <span class=
=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">call</span><span class=3D"p">.</span><span class=3D"nx">end</span><span=
 class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span cl=
ass=3D"p">(</span><span class=3D"s1">'data'</span><span class=3D"p">,</span=
> <span class=3D"p">(</span><span class=3D"nx">d</span><span class=3D"p">)<=
/span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">d</span><span class=3D"p">.</spa=
n><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">call</span><span class=3D"p">.</span><span class=3D"nx">write</span><sp=
an class=3D"p">(</span><span class=3D"nx">d</span><span class=3D"p">)</span=
>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
,</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p><code>call</code> =E4=B8=BA=E5=8F=
=8C=E5=90=91=E6=B5=81, <code>on('data')</code> =E6=94=B6=E5=88=B0=E6=95=B0=
=E6=8D=AE=E6=97=B6=E7=9B=B4=E6=8E=A5 <code>write()</code> =E5=8F=91=E9=80=
=81=E5=9B=9E=E5=8E=BB.</p><div class=3D"highlight-wrapper"><div class=3D"hi=
ghlight"><button class=3D"copy-button" type=3D"button" aria-label=3D"Copy">=
Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"language-t=
s" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><span class=3D"=
p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
duplexStream</span>: <span class=3D"kt">toHandleBidiStreamingCall</span><sp=
an class=3D"p">(</span><span class=3D"kr">async</span> <span class=3D"p">(<=
/span><span class=3D"nx">req</span><span class=3D"p">,</span> <span class=
=3D"nx">md</span><span class=3D"p">,</span> <span class=3D"nx">call</span><=
span class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p=
">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>return</span> <span class=3D"nx">req</span><span class=3D"p">.</span><span=
 class=3D"nx">pipe</span><span class=3D"p">(</span><span class=3D"nx">tap</=
span><span class=3D"p">((</span><span class=3D"nx">data</span><span class=
=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"nx">console=
</span><span class=3D"p">.</span><span class=3D"nx">log</span><span class=
=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">.</span><spa=
n class=3D"nx">toObject</span><span class=3D"p">())))</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
),</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E7=9B=B4=E6=8E=A5=E5=B0=86 reque=
st =E6=B5=81=E8=BF=94=E5=9B=9E=E5=8D=B3=E5=8F=AF, <code>pipe(tap)</code> =
=E5=8F=AA=E6=98=AF=E4=B8=BA=E4=BA=86=E6=89=93=E5=8D=B0=E8=AF=B7=E6=B1=82.</=
p><h4 id=3D"client-=E7=AB=AF-3" class=3D"relative group">client =E7=AB=AF <=
span class=3D"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 r=
tl:-right-6 not-prose group-hover:opacity-100"><a class=3D"group-hover:text=
-primary-300 dark:group-hover:text-neutral-700" style=3D"text-decoration-li=
ne:none!important" href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-ty=
pescript/#client-%e7%ab%af-3" aria-label=3D"Anchor">#</a></span></h4><p>=E8=
=AF=B7=E6=B1=82=E6=B5=81=E5=8F=91=E9=80=81 5 =E6=9D=A1=E6=95=B0=E6=8D=AE <c=
ode>test 0</code> =E5=88=B0 <code>test 4</code>, =E6=AF=8F=E7=A7=92=E5=8F=
=91=E9=80=81=E4=B8=80=E6=9D=A1.</p><div class=3D"highlight-wrapper"><div cl=
ass=3D"highlight"><button class=3D"copy-button" type=3D"button" aria-label=
=3D"Copy">Copy</button><pre tabindex=3D"0" class=3D"chroma"><code class=3D"=
language-ts" data-lang=3D"ts"><span class=3D"line"><span class=3D"cl"><span=
 class=3D"kr">const</span> <span class=3D"nx">testDuplexStream</span> <span=
 class=3D"o">=3D</span> <span class=3D"kr">async</span> <span class=3D"p">(=
</span><span class=3D"nx">c</span>: <span class=3D"kt">HelloClient</span><s=
pan class=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p"=
>{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">call</span> <span class=3D"o">=3D</span> <s=
pan class=3D"nx">c</span><span class=3D"p">.</span><span class=3D"nx">duple=
xStream</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span clas=
s=3D"p">(</span><span class=3D"s1">'data'</span><span class=3D"p">,</span> =
<span class=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">)=
</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">.</sp=
an><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
call</span><span class=3D"p">.</span><span class=3D"nx">on</span><span clas=
s=3D"p">(</span><span class=3D"s1">'end'</span><span class=3D"p">,</span> <=
span class=3D"p">()</span> <span class=3D"o">=3D&gt;</span> <span class=3D"=
p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><spa=
n class=3D"p">(</span><span class=3D"s1">'end'</span><span class=3D"p">)</s=
pan>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
)</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"k">f=
or</span> <span class=3D"p">(</span><span class=3D"kd">let</span> <span cla=
ss=3D"nx">i</span> <span class=3D"o">=3D</span> <span class=3D"mi">0</span>=
<span class=3D"p">;</span> <span class=3D"nx">i</span> <span class=3D"o">&l=
t;</span> <span class=3D"mi">5</span><span class=3D"p">;</span> <span class=
=3D"nx">i</span><span class=3D"o">++</span><span class=3D"p">)</span> <span=
 class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"kr=
">const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span> <=
span class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p">.=
</span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span><=
span class=3D"p">(</span><span class=3D"sb">`test </span><span class=3D"si"=
>${</span><span class=3D"nx">i</span><span class=3D"si">}</span><span class=
=3D"sb">`</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">call</span><span class=3D"p">.</span><span class=3D"nx">write</span><span=
 class=3D"p">(</span><span class=3D"nx">req</span><span class=3D"p">)</span=
>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"k"=
>if</span> <span class=3D"p">(</span><span class=3D"nx">i</span> <span clas=
s=3D"o">&lt;</span> <span class=3D"mi">4</span><span class=3D"p">)</span> <=
span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
k">await</span> <span class=3D"nx">sleep</span><span class=3D"p">(</span><s=
pan class=3D"mi">1000</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">}=
</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
call</span><span class=3D"p">.</span><span class=3D"nx">end</span><span cla=
ss=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E5=92=8C server =E7=AB=AF=E4=B8=
=80=E6=A0=B7, <code>on('data')</code> =E6=8E=A5=E6=94=B6=E6=95=B0=E6=8D=AE,=
 <code>write()</code> =E5=8F=91=E9=80=81=E6=95=B0=E6=8D=AE.</p><div class=
=3D"highlight-wrapper"><div class=3D"highlight"><button class=3D"copy-butto=
n" type=3D"button" aria-label=3D"Copy">Copy</button><pre tabindex=3D"0" cla=
ss=3D"chroma"><code class=3D"language-ts" data-lang=3D"ts"><span class=3D"l=
ine"><span class=3D"cl"><span class=3D"kr">const</span> <span class=3D"nx">=
testDuplexStream</span> <span class=3D"o">=3D</span> <span class=3D"kr">asy=
nc</span> <span class=3D"p">(</span><span class=3D"nx">c</span>: <span clas=
s=3D"kt">HelloClient</span><span class=3D"p">)</span> <span class=3D"o">=3D=
&gt;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">call</span> <span class=3D"o">=3D</span> <s=
pan class=3D"nx">c</span><span class=3D"p">.</span><span class=3D"nx">duple=
xStream</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">result$</span> <span class=3D"o">=3D</span>=
 <span class=3D"nx">readStreamToObserver</span><span class=3D"p">(</span><s=
pan class=3D"nx">call</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
result$</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>.</span><span class=3D"nx">forEach</span><span class=3D"p">((</span><span =
class=3D"nx">data</span><span class=3D"p">)</span> <span class=3D"o">=3D&gt=
;</span> <span class=3D"p">{</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">console</span><span class=3D"p">.</span><span class=3D"nx">log</span><s=
pan class=3D"p">(</span><span class=3D"nx">data</span><span class=3D"p">.</=
span><span class=3D"nx">toObject</span><span class=3D"p">())</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>})</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>.</span><span class=3D"nx">then</span><span class=3D"p">(()</span> <span c=
lass=3D"o">=3D&gt;</span> <span class=3D"nx">console</span><span class=3D"p=
">.</span><span class=3D"nx">log</span><span class=3D"p">(</span><span clas=
s=3D"s1">'end'</span><span class=3D"p">))</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"kr">=
const</span> <span class=3D"nx">source$</span> <span class=3D"o">=3D</span>=
 <span class=3D"nx">interval</span><span class=3D"p">(</span><span class=3D=
"mi">1000</span><span class=3D"p">).</span><span class=3D"nx">pipe</span><s=
pan class=3D"p">(</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">take</span><span class=3D"p">(</span><span class=3D"mi">5</span><span cla=
ss=3D"p">),</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">map</span><span class=3D"p">((</span><span class=3D"nx">v</span><span cla=
ss=3D"p">)</span> <span class=3D"o">=3D&gt;</span> <span class=3D"p">{</spa=
n>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
kr">const</span> <span class=3D"nx">req</span> <span class=3D"o">=3D</span>=
 <span class=3D"k">new</span> <span class=3D"nx">pb</span><span class=3D"p"=
>.</span><span class=3D"nx">EchoRequest</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
nx">req</span><span class=3D"p">.</span><span class=3D"nx">setMessage</span=
><span class=3D"p">(</span><span class=3D"sb">`test </span><span class=3D"s=
i">${</span><span class=3D"nx">v</span><span class=3D"si">}</span><span cla=
ss=3D"sb">`</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">      <span class=3D"=
k">return</span> <span class=3D"k">of</span><span class=3D"p">(</span><span=
 class=3D"nx">req</span><span class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"p"=
>}),</span>
</span></span><span class=3D"line"><span class=3D"cl">    <span class=3D"nx=
">concatAll</span><span class=3D"p">()</span>
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"p">)=
</span>
</span></span><span class=3D"line"><span class=3D"cl">
</span></span><span class=3D"line"><span class=3D"cl">  <span class=3D"nx">=
observerToWriteStream</span><span class=3D"p">(</span><span class=3D"nx">so=
urce$</span><span class=3D"p">,</span> <span class=3D"nx">call</span><span =
class=3D"p">)</span>
</span></span><span class=3D"line"><span class=3D"cl"><span class=3D"p">}</=
span>
</span></span></code></pre></div></div><p>=E7=BB=84=E5=90=88 <code>readStre=
amToObserver()</code> =E5=92=8C <code>observerToWriteStream()</code> =E6=96=
=B9=E6=B3=95, =E5=B0=86=E8=AF=BB=E5=86=99=E5=88=86=E5=88=AB=E8=BD=AC=E5=8C=
=96=E4=B8=BA=E4=B8=A4=E4=B8=AA <code>Observable</code>.</p><h2 id=3D"=E6=80=
=BB=E7=BB=93" class=3D"relative group">=E6=80=BB=E7=BB=93 <span class=3D"ab=
solute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-=
prose group-hover:opacity-100"><a class=3D"group-hover:text-primary-300 dar=
k:group-hover:text-neutral-700" style=3D"text-decoration-line:none!importan=
t" href=3D"https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/#%e6%80=
%bb%e7%bb%93" aria-label=3D"Anchor">#</a></span></h2><p>=E4=BB=A5=E4=B8=8A=
=E5=B0=B1=E6=98=AF=E4=BD=BF=E7=94=A8 grpc =E6=9C=80=E7=AE=80=E5=8D=95=E7=9A=
=84=E7=A4=BA=E4=BE=8B, =E5=AE=8C=E6=95=B4=E4=BB=A3=E7=A0=81=E5=8F=AF=E6=9F=
=A5=E7=9C=8B <a href=3D"https://github.com/zcong1993/ts-grpc-example" targe=
t=3D"_blank" rel=3D"noreferrer noopener">zcong1993/ts-grpc-example</a>. =E9=
=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C metadata =E4=B9=8B=E7=B1=BB=E7=
=9A=84=E5=8A=9F=E8=83=BD=E5=90=8E=E7=BB=AD=E5=86=8D=E4=BB=8B=E7=BB=8D.</p><=
/div></section><footer class=3D"pt-8 max-w-prose print:hidden"><div class=
=3D"flex"><img class=3D"!mt-0 !mb-0 h-24 w-24 rounded-full ltr:mr-4 rtl:ml-=
4" width=3D"96" height=3D"96" alt=3D"Cong" src=3D"https://blog.cong.moe/100=
6164_hu5c5f08ecb811926fc01848d227d7f912_248968_192x192_fill_q75_box_smart1.=
jpg"><div class=3D"place-self-center"><div class=3D"text-[0.6rem] uppercase=
 leading-3 text-neutral-500 dark:text-neutral-400">Author</div><div class=
=3D"font-semibold leading-6 text-neutral-800 dark:text-neutral-300">Cong</d=
iv><div class=3D"text-sm text-neutral-700 dark:text-neutral-400">=E5=9B=A0=
=E6=9E=9C=E6=9C=89=E5=BE=8B, =E4=B8=96=E9=97=B4=E6=97=A0=E5=B8=B8.</div><di=
v class=3D"text-2xl sm:text-lg"><div class=3D"flex flex-wrap text-neutral-4=
00 dark:text-neutral-500"><a class=3D"px-1 transition-transform hover:scale=
-125 hover:text-primary-700 dark:hover:text-primary-400" style=3D"will-chan=
ge:transform" href=3D"mailto:zhangcong1992@gmail.com" target=3D"_blank" ari=
a-label=3D"Email" rel=3D"me noopener noreferrer"><span class=3D"relative in=
line-block align-text-bottom icon"><svg xmlns=3D"http://www.w3.org/2000/svg=
" viewBox=3D"0 0 512 512"><path fill=3D"currentcolor" d=3D"M207.8 20.73c-93=
.45 18.32-168.7 93.66-187 187.1-27.64 140.9 68.65 266.2 199.1 285.1 19.01 2=
.888 36.17-12.26 36.17-31.49l1e-4-.6631c0-15.74-11.44-28.88-26.84-31.24-84.=
35-12.98-149.2-86.13-149.2-174.2.0-102.9 88.61-185.5 193.4-175.4 91.54 8.86=
9 158.6 91.25 158.6 183.2v16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-4=
0.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98.0036c-7.299.0-13.2=
 4.992-15.12 11.68-24.85-12.15-54.24-16.38-86.06-5.106-38.75 13.73-68.12 48=
.91-73.72 89.64-9.483 69.01 43.81 128 110.9 128 26.44.0 50.43-9.544 69.59-2=
4.88 24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.=
3c0-149.2-133.9-265.632-287.3-235.57zM239.1 304.3c-26.47.0-48-21.56-48-48.0=
5s21.53-48.05 48-48.05 48 21.56 48 48.05-20.6 48.05-48 48.05z"></path></svg=
></span></a><a class=3D"px-1 transition-transform hover:scale-125 hover:tex=
t-primary-700 dark:hover:text-primary-400" style=3D"will-change:transform" =
href=3D"https://github.com/zcong1993" target=3D"_blank" aria-label=3D"Githu=
b" rel=3D"me noopener noreferrer"><span class=3D"relative inline-block alig=
n-text-bottom icon"><svg xmlns=3D"http://www.w3.org/2000/svg" viewBox=3D"0 =
0 496 512"><path fill=3D"currentcolor" d=3D"M165.9 397.4c0 2-2.3 3.6-5.2 3.=
6-3.3.3-5.6-1.3-5.6-3.6.0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5=
c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6.0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2=
 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.=
6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3.0 252c0 110.9 69.8 205.=
8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1.0-6.2-.3-40.4-.3-61.4.0.0-70 15-8=
4.7-29.8.0.0-11.4-29.1-27.8-36.6.0.0-22.9-15.7 1.6-15.4.0.0 24.9 2 38.6 25.=
8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3=
-112.3-110.5.0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 =
69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 =
13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9.0 96.5-58.9 104.2-1=
14.8 110.5 9.2 7.9 17 22.9 17 46.4.0 33.7-.3 75.4-.3 83.6.0 6.5 4.6 14.4 17=
.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9=
c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.=
3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.=
3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6=
.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6=
.0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9.0-6.2-1.4-2.3-4-3.3-5.6-2z">=
</path></svg></span></a><a class=3D"px-1 transition-transform hover:scale-1=
25 hover:text-primary-700 dark:hover:text-primary-400" style=3D"will-change=
:transform" href=3D"https://m.cmx.im/@zcong1993" target=3D"_blank" aria-lab=
el=3D"Mastodon" rel=3D"me noopener noreferrer"><span class=3D"relative inli=
ne-block align-text-bottom icon"><svg xmlns=3D"http://www.w3.org/2000/svg" =
viewBox=3D"0 0 448 512"><path fill=3D"currentcolor" d=3D"M433 179.11c0-97.2=
-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48.0.0.0-63.72 28.5-63.=
72 125.7.0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.=
81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83=
-4.4-89.63-54a102.54 102.54.0 01-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 5=
6.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63=
v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H9=
0.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 =
11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></=
path></svg></span></a><a class=3D"px-1 transition-transform hover:scale-125=
 hover:text-primary-700 dark:hover:text-primary-400" style=3D"will-change:t=
ransform" href=3D"https://twitter.com/CongZhangDev" target=3D"_blank" aria-=
label=3D"Twitter" rel=3D"me noopener noreferrer"><span class=3D"relative in=
line-block align-text-bottom icon"><svg xmlns=3D"http://www.w3.org/2000/svg=
" viewBox=3D"0 0 512 512"><path fill=3D"currentcolor" d=3D"M459.37 151.716c=
.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-298.558 298.558-59=
.452.0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.0=
55.0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6=
.498.974 12.995 1.624 19.818 1.624 9.421.0 18.843-1.3 27.614-3.573-48.081-9=
.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13=
.319-28.264-18.843-46.781-51.005-46.781-87.391.0-19.492 5.197-37.36 14.294-=
52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918=
-2.599-24.04.0-57.828 46.782-104.934 104.934-104.934 30.213.0 57.502 12.67 =
76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.=
833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.=
161 39.308-52.628 54.253z"></path></svg></span></a></div></div></div></div>=
<div class=3D"pt-8"><hr class=3D"border-dotted border-neutral-300 dark:bord=
er-neutral-600"><div class=3D"flex justify-between pt-3"><span><a class=3D"=
group flex" href=3D"https://blog.cong.moe/post/2021-03-26-inlets-caddy-secu=
re-tunnel/"><span class=3D"mr-2 text-neutral-700 transition-transform group=
-hover:-translate-x-[2px] group-hover:text-primary-600 ltr:inline rtl:hidde=
n dark:text-neutral dark:group-hover:text-primary-400">=E2=86=90</span>
<span class=3D"ml-2 text-neutral-700 transition-transform group-hover:trans=
late-x-[2px] group-hover:text-primary-600 ltr:hidden rtl:inline dark:text-n=
eutral dark:group-hover:text-primary-400">=E2=86=92</span>
<span class=3D"flex flex-col"><span class=3D"mt-[0.1rem] leading-6 group-ho=
ver:underline group-hover:decoration-primary-500">inlets + caddy =E5=AE=9E=
=E7=8E=B0=E5=AE=89=E5=85=A8=E5=86=85=E7=BD=91=E7=A9=BF=E9=80=8F=E9=9A=A7=E9=
=81=93</span>
<span class=3D"mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400">=
<time datetime=3D"2021-03-26 18:37:48 +0800 +0800">March 26, 2021</time></s=
pan></span></a></span>
<span><a class=3D"group flex text-right" href=3D"https://blog.cong.moe/post=
/2021-03-15-grpc-go-discovery-in-k8s/"><span class=3D"flex flex-col"><span =
class=3D"mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration=
-primary-500">=E5=9C=A8 k8s =E4=B8=AD=E4=BD=BF=E7=94=A8 gRPC Go =E6=9C=8D=
=E5=8A=A1=E5=8F=91=E7=8E=B0</span>
<span class=3D"mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400">=
<time datetime=3D"2021-03-15 16:51:07 +0800 +0800">March 15, 2021</time></s=
pan></span>
<span class=3D"ml-2 text-neutral-700 transition-transform group-hover:trans=
late-x-[2px] group-hover:text-primary-600 ltr:inline rtl:hidden dark:text-n=
eutral dark:group-hover:text-primary-400">=E2=86=92</span>
<span class=3D"mr-2 text-neutral-700 transition-transform group-hover:-tran=
slate-x-[2px] group-hover:text-primary-600 ltr:hidden rtl:inline dark:text-=
neutral dark:group-hover:text-primary-400">=E2=86=90</span></a></span></div=
></div><div class=3D"pt-3"><hr class=3D"border-dotted border-neutral-300 da=
rk:border-neutral-600"><div class=3D"pt-3"><div id=3D"giscus"></div><div cl=
ass=3D"giscus"><iframe class=3D"giscus-frame" title=3D"Comments" scrolling=
=3D"no" allow=3D"clipboard-write" src=3D"cid:frame-571E8326E57CE1D5C5C80BEC=
F492B501@mhtml.blink" style=3D""></iframe></div></div></div></footer></arti=
cle><div class=3D"pointer-events-none absolute top-[100vh] bottom-0 w-12 lt=
r:right-0 rtl:left-0"><a href=3D"https://blog.cong.moe/post/2021-03-16-grpc=
-on-typescript/#the-top" class=3D"pointer-events-auto sticky top-[calc(100v=
h-5.5rem)] flex h-12 w-12 items-center justify-center rounded-full bg-neutr=
al/50 text-xl text-neutral-700 backdrop-blur hover:text-primary-600 dark:bg=
-neutral-800/50 dark:text-neutral dark:hover:text-primary-400" aria-label=
=3D"Scroll to top" title=3D"Scroll to top">=E2=86=91</a></div></main><foote=
r class=3D"py-10 print:hidden"><div class=3D"flex items-center justify-betw=
een"><div><p class=3D"text-sm text-neutral-500 dark:text-neutral-400">Copy,=
 <em>right?</em> =F0=9F=A4=94</p><p class=3D"text-xs text-neutral-500 dark:=
text-neutral-400">Powered by <a class=3D"hover:underline hover:decoration-p=
rimary-400 hover:text-primary-500" href=3D"https://gohugo.io/" target=3D"_b=
lank" rel=3D"noopener noreferrer">Hugo</a> &amp; <a class=3D"hover:underlin=
e hover:decoration-primary-400 hover:text-primary-500" href=3D"https://git.=
io/hugo-congo" target=3D"_blank" rel=3D"noopener noreferrer">Congo</a></p><=
/div><div class=3D"ltr:mr-14 rtl:ml-14 cursor-pointer text-sm text-neutral-=
700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"><=
button id=3D"appearance-switcher-0" type=3D"button" aria-label=3D"appearanc=
e switcher"><div class=3D"flex items-center justify-center w-12 h-12 dark:h=
idden" title=3D"Switch to dark appearance"><span class=3D"relative inline-b=
lock align-text-bottom icon"><svg xmlns=3D"http://www.w3.org/2000/svg" view=
Box=3D"0 0 512 512"><path fill=3D"currentcolor" d=3D"M32 256C32 132.2 132.3=
 32 255.8 32c11.36.0 29.7 1.668 40.9 3.746 9.616 1.777 11.75 14.63 3.279 19=
.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3 9.561-1.=
805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480 132.1 480 32 37=
9.6 32 256z"></path></svg></span></div><div class=3D"items-center justify-c=
enter hidden w-12 h-12 dark:flex" title=3D"Switch to light appearance"><spa=
n class=3D"relative inline-block align-text-bottom icon"><svg xmlns=3D"http=
://www.w3.org/2000/svg" viewBox=3D"0 0 512 512"><path fill=3D"currentcolor"=
 d=3D"M256 159.1c-53.02.0-95.1 42.98-95.1 95.1s41.2 96.9 95.1 96.9 95.1-42.=
98 95.1-95.1S309 159.1 256 159.1zM509.3 347l-63.2-91.9 63.15-91.01c6.332-9.=
125 1.104-21.74-9.826-23.72l-109-19.7-19.7-109c-1.975-10.93-14.59-16.16-23.=
72-9.824L256 65.89 164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 1=
21.6 12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256 2.74 347.01c=
-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7 19.7 109c1.975 10.93 14.59 16=
.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l1=
9.7-109 109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69.0-127.=
1-57.31-127.1-127.1.0-70.69 57.31-127.1 127.1-127.1S383.1 186.2 383.1 256c0=
 70.7-56.4 127.1-127.1 127.1z"></path></svg></span></div></button></div></d=
iv></footer><div id=3D"search-wrapper" class=3D"invisible fixed inset-0 z-5=
0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 back=
drop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]" data-ur=
l=3D"https://blog.cong.moe/"><div id=3D"search-modal" class=3D"flex flex-co=
l w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 borde=
r-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800"><head=
er class=3D"relative z-10 flex items-center justify-between flex-none px-2"=
><form class=3D"flex items-center flex-auto min-w-0"><div class=3D"flex ite=
ms-center justify-center w-8 h-8 text-neutral-400"><span class=3D"relative =
inline-block align-text-bottom icon"><svg aria-hidden=3D"true" focusable=3D=
"false" data-prefix=3D"fas" data-icon=3D"search" class=3D"svg-inline--fa fa=
-search fa-w-16" role=3D"img" xmlns=3D"http://www.w3.org/2000/svg" viewBox=
=3D"0 0 512 512"><path fill=3D"currentcolor" d=3D"M505 442.7 405.3 343c-4.5=
-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1=
.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99=
.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-7=
0.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70=
.7-57.2 128-128 128z"></path></svg></span></div><input type=3D"search" id=
=3D"search-query" class=3D"flex flex-auto h-12 mx-1 bg-transparent appearan=
ce-none focus:outline-dotted focus:outline-2 focus:outline-transparent" pla=
ceholder=3D"Search" tabindex=3D"0"></form><button id=3D"close-search-button=
" class=3D"flex items-center justify-center w-8 h-8 text-neutral-700 hover:=
text-primary-600 dark:text-neutral dark:hover:text-primary-400" title=3D"Cl=
ose (Esc)">
<span class=3D"relative inline-block align-text-bottom icon"><svg xmlns=3D"=
http://www.w3.org/2000/svg" viewBox=3D"0 0 320 512"><path fill=3D"currentco=
lor" d=3D"M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 2=
88 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416=
 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9=
.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4=
-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 3=
61.4z"></path></svg></span></button></header><section class=3D"flex-auto px=
-2 overflow-auto"><ul id=3D"search-results"></ul></section></div></div></di=
v><div class=3D"xl-chrome-ext-bar_4DB361DE-01F7-4376-B494-639E489D19ED" id=
=3D"xl_chrome_ext_4DB361DE-01F7-4376-B494-639E489D19ED" data-v-app=3D"" sty=
le=3D"display: block;"><div class=3D""><!----><div class=3D"_options-wrappe=
r_1h5qu_1" style=3D"display: none;"><a id=3D"xl_chrome_ext_bar_close"></a><=
div class=3D"_xl-chrome-ext-bar__logo_1h5qu_28"></div><!----><div class=3D"=
_xl-chrome-ext-tips_1h5qu_60"><a id=3D"xl_chrome_ext_bar_download" class=3D=
"_xl-chrome-ext-bar__option_1h5qu_76"></a><div class=3D"_xl-chrome-ext-titl=
e_1h5qu_67">=E4=B8=8B=E8=BD=BD=E8=A7=86=E9=A2=91</div></div><div class=3D"_=
xl-chrome-ext-tips_1h5qu_60"><a id=3D"xl_chrome_ext_bar_screen" class=3D"_x=
l-chrome-ext-bar__option_1h5qu_76"></a><div class=3D"_xl-chrome-ext-title_1=
h5qu_67">=E6=8A=95=E5=B1=8F</div></div><div class=3D"_xl-chrome-ext-tips_1h=
5qu_60"><a id=3D"xl_chrome_ext_bar_copy" class=3D"_xl-chrome-ext-bar__optio=
n_1h5qu_76"></a><div class=3D"_xl-chrome-ext-title_1h5qu_67">=E5=A4=8D=E5=
=88=B6=E9=93=BE=E6=8E=A5</div></div></div><!----><!----><!----><!----></div=
></div></body></html>
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: cid:css-cc00ac89-7360-4d9b-8ce2-0f77a85ee98d@mhtml.blink

@charset "utf-8";

.gwd-row[data-v-782a8437] { display: flex; flex-direction: row; }

.gwd-inline-row[data-v-782a8437] { display: inline-flex; flex-direction: ro=
w; }

.gwd-column[data-v-782a8437] { display: flex; flex-direction: column; }

.gwd-inline-column[data-v-782a8437] { display: inline-flex; flex-direction:=
 column; }

.gwd-align[data-v-782a8437] { align-content: center; align-items: center; }

.gwd-jcc[data-v-782a8437] { justify-content: center; }

.gwd-jic[data-v-782a8437] { justify-items: center; }

.gwd-button[data-v-782a8437] { outline: none; border: none; }

.bjg-bar-button[data-v-782a8437] { font-size: 0px; }

.bjg-bar-button[data-v-782a8437]:hover { background: rgb(255, 251, 239); cu=
rsor: pointer; }

.bjg-bar-button:hover .bjg-window[data-v-782a8437] { display: block; }

.mainbar-fold .bjg-bar-button[data-v-782a8437], .mainbar-fold #top_coupon_b=
tn[data-v-782a8437], .mainbar-fold .rinfo-btn[data-v-782a8437], .mainbar-fo=
ld .gwd-bottom-tmall[data-v-782a8437] { display: none !important; }

.gwd-font12[data-v-782a8437] { font-size: 12px; }

.gwd-font14[data-v-782a8437] { font-size: 14px; }

.gwd-red[data-v-782a8437] { color: rgb(255, 53, 50); }

.gwd-red-bg[data-v-782a8437] { background: rgb(255, 53, 50); }

.gwd-hui333[data-v-782a8437] { color: rgb(51, 51, 51); }

.gwd-hui999[data-v-782a8437] { color: rgb(153, 153, 153); }

.gwd-font10[data-v-782a8437] { font-size: 12px; transform: scale(0.8333); t=
ransform-origin: center bottom; }

.gwd-font11[data-v-782a8437] { font-size: 12px; transform: scale(0.91666); =
transform-origin: center bottom; }

.gwd-font9[data-v-782a8437] { font-size: 12px; transform: scale(0.75); tran=
sform-origin: center bottom; }

.gwd-hoverable[data-v-782a8437]:hover { background: rgb(237, 241, 242); }

.right-info > [data-v-782a8437] { border-left: 1px solid rgb(237, 241, 242)=
; }

.gwd-red-after-visit[data-v-782a8437]:hover { color: rgb(224, 48, 36) !impo=
rtant; }

.gwd-button[data-v-782a8437]:hover { filter: brightness(1.1); }

.gwd-button[data-v-782a8437] { padding-top: 1px; padding-bottom: 1px; }

.gwd-button[data-v-782a8437]:active { filter: brightness(0.9); }

.gwd-fadeout-5s[data-v-782a8437] { opacity: 0; transition: opacity 5s; }

.gwd-scrollbar[data-v-782a8437]::-webkit-scrollbar { width: 6px; border-rad=
ius: 17px; }

.gwd-scrollbar[data-v-782a8437]::-webkit-scrollbar-thumb { border-radius: 1=
7px; background: rgb(153, 153, 153); }

#gwdang_main[data-v-782a8437], .gwdang-main[data-v-782a8437], .bjgext-detai=
l[data-v-782a8437] { font-size: 12px; }

#gwdang_main button[data-v-782a8437], .gwdang-main button[data-v-782a8437],=
 .bjgext-detail button[data-v-782a8437] { text-align: center; }

.gwd-width-100[data-v-782a8437] { width: 100%; }

.gwd-overlay[data-v-782a8437] { font-family: "Microsoft YaHei", Arial, SimS=
un, serif; font-size: 0px; position: fixed; inset: 0px; background: rgba(0,=
 0, 0, 0.35); z-index: 999999999; }

.gwd-taobao[data-v-782a8437] { margin-top: 20px; }

.gwd-taobao span[data-v-782a8437] { color: rgb(255, 68, 0); }

.gwd-jd[data-v-782a8437] { margin-top: 20px; }

.gwd-jd span[data-v-782a8437] { color: rgb(226, 35, 26); }

a[data-v-782a8437] { white-space: nowrap; position: relative; height: 24px;=
 font-family: "Microsoft YaHei"; }

a[data-v-782a8437]:hover { text-decoration: none; cursor: pointer; }

a:hover .gwd-tooltip[data-v-782a8437] { display: block; }

.gwd-coupon[data-v-782a8437] { height: 24px; box-sizing: border-box; min-wi=
dth: 106px; }

.gwd-coupon[data-v-782a8437] { background-size: contain; padding-left: 8px;=
 padding-right: 8px; }

.gwd-coupon[data-v-782a8437]::before, .gwd-coupon[data-v-782a8437]::after {=
 content: ""; position: absolute; top: 0px; bottom: 0px; width: 9px; backgr=
ound-size: contain; }

.gwd-coupon[data-v-782a8437]::before { left: 0px; }

.gwd-coupon[data-v-782a8437]::after { right: 0px; transform: rotate(180deg)=
; }

.gwd-coupon.gwd-taobao[data-v-782a8437] { background-image: url("data:image=
/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAA0CAYAAAAjfRLqAAAAAXNSR0IArs4c6QA=
AAU5JREFUeF7tlNENgDAQhdrd3H+lc4cmGgX8r5YHca+eFgAtsOdaA+IJRb5AQcsDoOHvmekPTb=
Mq5ilosXwiekETrYqZClosn4he0ESrYqaCFssnohc00aqYqaDF8onoBU20KmYqaLF8InpBE62Km=
QpaLJ+IXtBEq2KmghbLJ6IXNNGqmKmgxfKJ6AVNtCpmKmixfCJ6QROtipkKWiyfiF7QRKtipoIW=
yyeiFzTRqpipoMXyiegFTbQqZiposXwiekETrYqZClosn4he0ESrYqaCFssnohc00aqYqaDF8on=
oBU20KmYqaLF8InpBE62KmQpaLJ+IXtBEq2KmghbLJ6IXNNGqmKmgxfKJ6AVNtCpmKmixfCJ6QR=
OtipkKWiyfiF7QRKtipoL+m/yZv9341fvuuVYLvTp5H3tygYJ+ct3zd/eTOdxuH57rWAt8coEbb=
yjDgopRg1YAAAAASUVORK5CYII=3D"); }

.gwd-coupon.gwd-taobao[data-v-782a8437]::before, .gwd-coupon.gwd-taobao[dat=
a-v-782a8437]::after { background-repeat: no-repeat; background-image: url(=
"
R0IArs4c6QAAAZJJREFUSEvtlz9OAkEUh79NsNJiOy038QDuEUggxM6INWCrDRRSwwE0UtqtiR7=
A3mKPwBH2CF7AZM2bAeJkIeyb3U004TU0w5f3Z37vNxtQUwTCybvkVXkNgT79E3MzumjDQwJnkb=
rSYmknITymcB6rYAZkGt4m4og5OSMkM4EpYgNawUJaZEDIewan5Ut0QKurIKm0TUaSWcnYBloCc=
SVQ3mFMwMKUJKUpwk6tQ0KANMTWMn2F3kiBAXf8xyEMZ9CfqCBy2AV9fIHAPMIF1SYR5ch/J16U=
iPTn7lld3Bok0ogIuDK3ejiHwUwFcyXSNeNPEeG+ZZjfkrH7Zr8sVRugGa3ll0R8I1rzU7/ZRS0=
jERlXTO8WpknJ7thjxfGLYJ9S1S4qgmTkNxMvmTQkkdq0drCjbResGYmsfO0v2pFsSKWTFLUmdj=
SYqwT7H+xI9rTHa237PqrJjuzL4X4B12NVww92tL9d9maLHYmXtRAPir2fx85HTS121B9bsSre1=
+uiG7Kj/T3deaLe77UKiWz++gOA98aFVwFZGwAAAABJRU5ErkJggg=3D=3D"); }

.gwd-coupon.gwd-taobao[data-v-782a8437]:hover { background-image: url("data=
:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAA0CAYAAAAjfRLqAAAAAXNSR0IAr=
s4c6QAAAVNJREFUeF7tlMENgzAUxZLd2H+NXrvB7w6RQMU290D8bLFXTwuAFthzrQHxhCJfoKDl=
AdDw93w//aFpVsU8BS2WT0QvaKJVMVNBi+UT0QuaaFXMVNBi+UT0giZaFTMVtFg+Eb2giVbFTAU=
tlk9EL2iiVTFTQYvlE9ELmmhVzFTQYvlE9IImWhUzFbRYPhG9oIlWxUwFLZZPRC9oolUxU0GL5R=
PRC5poVcxU0GL5RPSCJloVMxW0WD4RvaCJVsVMBS2WT0QvaKJVMVNBi+UT0QuaaFXMVNBi+UT0g=
iZaFTMVtFg+Eb2giVbFTAUtlk9EL2iiVTFTQYvlE9ELmmhVzFTQYvlE9IImWhUzFbRYPhG9oIlW=
xUwFLZZPRC9oolUxU0GL5RPRC5poVcxU0G+TP/O2Gz963z3XaqFHJ+9jdy5Q0Heue/7ufjKH2+3=
Dcx1rgb9c4AdcEryACPINxAAAAABJRU5ErkJggg=3D=3D"); }

.gwd-coupon.gwd-taobao[data-v-782a8437]:hover::before, .gwd-coupon.gwd-taob=
ao[data-v-782a8437]:hover::after { background-image: url("data:image/png;ba=
se64,iVBORw0KGgoAAAANSUhEUgAAABIAAAA0CAYAAACHO2h8AAAAAXNSR0IArs4c6QAAAYtJRE=
FUSEvtl79Kw2AUxX+BuCiULroVstfBVadIOwgd3NqxOOii4GAfwDoLdqpjcVdfwKF7HZydHH0JI=
XJvk+pHWujNH6nQC9mSk/Pde849iUdB5QlO1CTKi1cS0ONnZmIuo/oBnA9gp2YGTB9tqwL9Jwh2=
TWAKpA0PCdjgmoguwkzADDUDisGq+HwAVYYT0xEdoFgKYyBURsJsyZoH9Abs5QKKGlziMWC7Bve=
TJblMb5tOrcEIj0CPJCUSOOxkAEosslmBTg9apyaQH0YJ0MM7iI4ylCvIwixiHPlv4mmLSH9Obs=
yHS4DEGgEex6rq9hW0eyYw1yJNHf9YGz58NTV+sbJvX0wboByvRUcEfCFey+Z+3UW+WuRODRt24=
GJgb7aTImJY0ZNx3bo6krG3zkzTSmiXZJHCvLaOo3kCK8cica6tYhzJhjQmSXrVZtiO/yGOjJ8y=
fxJHXX1L1qklFKN1HC10v8aRZJnPSOOovg/951WIIzGqXMZMS3utsBQxdcW9udj/tRxEZo9+AyV=
qv4MZSS3ZAAAAAElFTkSuQmCC"); }

.gwd-coupon.gwd-jd[data-v-782a8437] { background-image: url("
JREFUeF7tnbERgFAMhcz+2+k0VnGF33kcWFvwAmfrXD1dAHCBee9nAZwhyi9QqPIAKPNnd/uiUm=
yJOQtVLJ80vVBJtsSshSqWT5peqCRbYtZCFcsnTS9Uki0xa6GK5ZOmFyrJlpi1UMXySdMLlWRLz=
FqoYvmk6YVKsiVmLVSxfNL0QiXZErMWqlg+aXqhkmyJWQtVLJ80vVBJtsSshSqWT5peqCRbYtZC=
FcsnTS9Uki0xa6GK5ZOmFyrJlpi1UMXySdMLlWRLzFqoYvmk6YVKsiVmLVSxfNL0QiXZErMWqlg=
+aXqhkmyJWQtVLJ80vVBJtsSshSqWT5peqCRbYtZCFcsnTe/3PSRbYtZC/V9+v086cDAH7/RKF/=
j9Ah900KcI8oZhhwAAAABJRU5ErkJggg=3D=3D"); }

.gwd-coupon.gwd-jd[data-v-782a8437]::before, .gwd-coupon.gwd-jd[data-v-782a=
8437]::after { background-image: url("
NSUhEUgAAABIAAAAsCAYAAABovuiKAAAAAXNSR0IArs4c6QAAAdVJREFUSEvNVlFO20AQfbOzay=
EhUUepgkIicFBKCmoljpAb0CNwA7gBuUG4AUfhCCvb6jdH4DPFldhqXCWya/Exi5G6n5b9/ObNm=
zdL6OmQ4LwUZXgv3scAudMZaH8/ilyHEX8egsdjNVgNtMnzFUCZAa5AlPJoBD4cqcBqoO3Z+HJp=
GI+UOLjFIh6o2cHk+7d4oMr7y8DWwzkkXyMYbYrimog+UcAKQCr6iE6a0+matF9soD0tIHs6g+n=
DR1qBm6xbjMwgrbWhJNFWhq5GiYOdzdRgO0NuvM+Y7UMAljGCt5wdvE8rts9gRnJxriqvBdSbs3=
+XP+9ew+squrSqKB8DKANCJqz45Bh8cKAvbRe1xoAnR+A0VYHIy63292ZItzhT+2dLvRu1Eem4K=
60qigeJWjGjPLTTCcxgoNKp5aNfeX5LZNbR7W/+ettBrfD/hL/PDNun6BGRgQWQsXXrEMKlxImd=
TvUatXa/c3XUajOp1X4JfTMcgphVbD7O2TH+edPZsq7tfK4u7+8lQnY+QgqDNYiyd18idiv7v4n=
aKi9vAuGe9vbgvsxVFqg1kukPIInFH3XUTifgmOlvOjvmJtIxpLs4V7f9TR+phGm83O89O5ZF87=
s/IaG3Cf8Fdl8AAAAASUVORK5CYII=3D"); background-size: cover; background-repe=
at: no-repeat; }

.gwd-coupon.gwd-jd[data-v-782a8437]:hover { background-image: url("data:ima=
ge/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAAAsCAYAAAD1nyNHAAAAAXNSR0IArs4c6=
QAAAR9JREFUeF7tnbENgFAQhbz9t9NdTGzUFX73Q8DagncQW+fo6QKAC8xzXh+AM0T5BQpVHgBl=
/rz33ReVYkvMWahi+aTphUqyJWYtVLF80vRCJdkSsxaqWD5peqGSbIlZC1UsnzS9UEm2xKyFKpZ=
Pml6oJFti1kIVyydNL1SSLTFroYrlk6YXKsmWmLVQxfJJ0wuVZEvMWqhi+aTphUqyJWYtVLF80v=
RCJdkSsxaqWD5peqGSbIlZC1UsnzS9UEm2xKyFKpZPml6oJFti1kIVyydNL1SSLTFroYrlk6YXK=
smWmLVQxfJJ0wuVZEvMWqhi+aTphUqyJWYtVLF80vRCJdkSsxaqWD5per/vIdkSsxbqfvn9PmnB=
wSy80ytdYPsFfqOApDYolPr+AAAAAElFTkSuQmCC"); }

.gwd-coupon.gwd-jd[data-v-782a8437]:hover::before, .gwd-coupon.gwd-jd[data-=
v-782a8437]:hover::after { background-image: url("
ORw0KGgoAAAANSUhEUgAAABIAAAAsCAYAAABovuiKAAAAAXNSR0IArs4c6QAAAclJREFUSEvNlt=
tNw0AQRe/MrgURChgThUeAmEcBKSEdQAl0AB2QDkIHlEIJlm3xTQl8BoyURePIkY3Fx6yDxPxFc=
q5m75x5EDYUJDqfWe666v2NkBmdgHs9r+RaGXEYwgwO1GKl0CJNZwDFDNyAKORoHyaKVGKlUBWL=
JJ+ywQtZCxuP/YXqFQyur/yFiiSZOGMTWIvAJ6NFlt0R0R45zAD4e1QHknrbsKOR6lnycaP8dnQ=
C2gRHWoPraTcy4n4fwhAFQbenlW+1FtIqWrE1kIskiY2xzw6Yik/ilyYaZLskCQtj38GM4PJCo7=
OqWj0qFLTGN4S+8tfHpVvOfFgqhYosf3GgGHCx/DbHR+CdHf3T1mQzwwwG4N2+SqRFttaXX4G04=
3M1P5VYe9RGEUy07/e0IsueZdQKjKXZw6Hap0b5P9L0gYjnncne2KiVfmNj37xbRAQAxMYGc+fc=
RMaJORyqDG+vbFlFvmOkIlvKTmEIYlZl83dk+/DzK9nluj4/g1ROE6sjQnY+XAjGHERx5yNivbL=
/zagt0vzeEZ5oawv27FRj0Wr4S/c7UAjgtlP3148IH6PbR8TlhRfVLSGVKT8+3uyd3SWT6r/fRd=
q0N2b1Td4AAAAASUVORK5CYII=3D"); }

.gwd-redpack[data-v-782a8437] { padding-right: 5px; padding-left: 8px; back=
ground: white; }

.gwd-redpack.gwd-taobao[data-v-782a8437] { border: 1px solid rgb(255, 68, 0=
); }

.gwd-redpack.gwd-taobao[data-v-782a8437]:hover { background: rgb(255, 240, =
231); }

.gwd-redpack.gwd-jd[data-v-782a8437] { border: 1px solid rgb(249, 210, 211)=
; }

.gwd-redpack.gwd-jd[data-v-782a8437]:hover { background: rgb(255, 240, 231)=
; }

.gwd-tooltip[data-v-782a8437] { position: absolute; top: -30px; left: 50%; =
transform: translateX(-50%); width: 60px; height: 22px; line-height: 22px; =
text-align: center; z-index: 1; color: rgb(60, 60, 60); box-shadow: rgba(0,=
 0, 0, 0.15) 0px 2px 8px; display: none; background: white; border-radius: =
2px; }

.gwd-tooltip span[data-v-782a8437] { color: rgb(60, 60, 60); }

.gwd-tooltip[data-v-782a8437]::after { content: " "; position: absolute; bo=
ttom: -10px; left: 50%; margin-left: -5px; border-width: 5px; border-style:=
 solid; border-color: transparent transparent white; transform: rotate(180d=
eg); }
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: https://giscus.app/default.css

@charset "utf-8";

.giscus, .giscus-frame { width: 100%; min-height: 150px; }

.giscus-frame { border: none; color-scheme: light dark; }

.giscus-frame--loading { opacity: 0; }
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: https://blog.cong.moe/css/main.bundle.min.827e4067f785eb8991b29db972c66513a2555b27ab79607dadc6efd017da4df0fd429efe9ed49a1fc101da2d1cb711816bb8efc4e01baaf9eeb352b258c9f887.css

@charset "utf-8";

:root { --color-neutral: 255, 255, 255; --color-neutral-50: 250, 250, 250; =
--color-neutral-100: 244, 244, 245; --color-neutral-200: 228, 228, 231; --c=
olor-neutral-300: 212, 212, 216; --color-neutral-400: 161, 161, 170; --colo=
r-neutral-500: 113, 113, 122; --color-neutral-600: 82, 82, 91; --color-neut=
ral-700: 63, 63, 70; --color-neutral-800: 39, 39, 42; --color-neutral-900: =
24, 24, 27; --color-primary-50: 245, 243, 255; --color-primary-100: 237, 23=
3, 254; --color-primary-200: 221, 214, 254; --color-primary-300: 196, 181, =
253; --color-primary-400: 167, 139, 250; --color-primary-500: 139, 92, 246;=
 --color-primary-600: 124, 58, 237; --color-primary-700: 109, 40, 217; --co=
lor-primary-800: 91, 33, 182; --color-primary-900: 76, 29, 149; --color-sec=
ondary-50: 253, 244, 255; --color-secondary-100: 250, 232, 255; --color-sec=
ondary-200: 245, 208, 254; --color-secondary-300: 240, 171, 252; --color-se=
condary-400: 232, 121, 249; --color-secondary-500: 217, 70, 239; --color-se=
condary-600: 192, 38, 211; --color-secondary-700: 162, 28, 175; --color-sec=
ondary-800: 134, 25, 143; --color-secondary-900: 112, 26, 117; }

*, ::before, ::after { box-sizing: border-box; border-width: 0px; border-st=
yle: solid; border-color: initial; }

::before, ::after { --tw-content: ''; }

html { line-height: 1.5; text-size-adjust: 100%; tab-size: 4; font-family: =
ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "segoe ui", Ro=
boto, "helvetica neue", Arial, "noto sans", sans-serif, "apple color emoji"=
, "segoe ui emoji", "segoe ui symbol", "noto color emoji"; font-feature-set=
tings: normal; }

body { margin: 0px; line-height: inherit; }

hr { height: 0px; color: inherit; border-top-width: 1px; }

abbr:where([title]) { text-decoration: underline dotted; }

h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; }

a { color: inherit; text-decoration: inherit; }

b, strong { font-weight: bolder; }

code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Mo=
naco, Consolas, "liberation mono", "courier new", monospace; font-size: 1em=
; }

small { font-size: 80%; }

sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-ali=
gn: baseline; }

sub { bottom: -0.25em; }

sup { top: -0.5em; }

table { text-indent: 0px; border-color: inherit; border-collapse: collapse;=
 }

button, input, optgroup, select, textarea { font-family: inherit; font-size=
: 100%; font-weight: inherit; line-height: inherit; color: inherit; margin:=
 0px; padding: 0px; }

button, select { text-transform: none; }

button, [type=3D"button"], [type=3D"reset"], [type=3D"submit"] { appearance=
: button; background-color: transparent; background-image: none; }

progress { vertical-align: baseline; }

::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; }

[type=3D"search"] { appearance: textfield; outline-offset: -2px; }

::-webkit-search-decoration { appearance: none; }

::-webkit-file-upload-button { appearance: button; font: inherit; }

summary { display: list-item; }

blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0p=
x; }

fieldset { margin: 0px; padding: 0px; }

legend { padding: 0px; }

ol, ul, menu { list-style: none; margin: 0px; padding: 0px; }

textarea { resize: vertical; }

input::placeholder, textarea::placeholder { opacity: 1; color: rgb(156, 163=
, 175); }

button, [role=3D"button"] { cursor: pointer; }

:disabled { cursor: default; }

img, svg, video, canvas, audio, iframe, embed, object { display: block; ver=
tical-align: middle; }

img, video { max-width: 100%; height: auto; }

[hidden] { display: none; }

*, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; =
--tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; -=
-tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: =
; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: =
; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-=
numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ri=
ng-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-of=
fset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000=
; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-cont=
rast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: =
; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-bri=
ghtness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdr=
op-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-back=
drop-saturate: ; --tw-backdrop-sepia: ; }

::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-trans=
late-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y=
: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pin=
ch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-sla=
shed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fr=
action: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-=
color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shado=
w: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-sha=
dow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --=
tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sep=
ia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ;=
 --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rot=
ate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-satur=
ate: ; --tw-backdrop-sepia: ; }

.prose { color: var(--tw-prose-body); max-width: 65ch; }

.prose :where(p):not(:where([class~=3D"not-prose"] *)) { margin-top: 1.25em=
; margin-bottom: 1.25em; }

.prose :where([class~=3D"lead"]):not(:where([class~=3D"not-prose"] *)) { co=
lor: var(--tw-prose-lead); font-size: 1.25em; line-height: 1.6; margin-top:=
 1.2em; margin-bottom: 1.2em; }

.prose :where(a):not(:where([class~=3D"not-prose"] *)) { color: var(--tw-pr=
ose-links); text-decoration-line: underline; text-decoration-thickness: ini=
tial; text-decoration-style: initial; font-weight: 500; text-decoration-col=
or: rgba(var(--color-primary-300),1); }

.prose :where(a):not(:where([class~=3D"not-prose"] *)):hover { color: rgba(=
var(--color-neutral),1); text-decoration: none; background-color: rgba(var(=
--color-primary-600),1); border-radius: 0.09rem; }

.prose :where(strong):not(:where([class~=3D"not-prose"] *)) { color: var(--=
tw-prose-bold); font-weight: 600; }

.prose :where(a strong):not(:where([class~=3D"not-prose"] *)) { color: inhe=
rit; }

.prose :where(blockquote strong):not(:where([class~=3D"not-prose"] *)) { co=
lor: inherit; }

.prose :where(thead th strong):not(:where([class~=3D"not-prose"] *)) { colo=
r: inherit; }

.prose :where(ol):not(:where([class~=3D"not-prose"] *)) { list-style-type: =
decimal; margin-top: 1.25em; margin-bottom: 1.25em; padding-left: 1.625em; =
}

.prose :where(ol[type=3D"A"]):not(:where([class~=3D"not-prose"] *)) { list-=
style-type: upper-alpha; }

.prose :where(ol[type=3D"a"]):not(:where([class~=3D"not-prose"] *)) { list-=
style-type: lower-alpha; }

.prose :where(ol[type=3D"As"]):not(:where([class~=3D"not-prose"] *)) { list=
-style-type: upper-alpha; }

.prose :where(ol[type=3D"as"]):not(:where([class~=3D"not-prose"] *)) { list=
-style-type: lower-alpha; }

.prose :where(ol[type=3D"I"]):not(:where([class~=3D"not-prose"] *)) { list-=
style-type: upper-roman; }

.prose :where(ol[type=3D"i"]):not(:where([class~=3D"not-prose"] *)) { list-=
style-type: lower-roman; }

.prose :where(ol[type=3D"Is"]):not(:where([class~=3D"not-prose"] *)) { list=
-style-type: upper-roman; }

.prose :where(ol[type=3D"is"]):not(:where([class~=3D"not-prose"] *)) { list=
-style-type: lower-roman; }

.prose :where(ol[type=3D"1"]):not(:where([class~=3D"not-prose"] *)) { list-=
style-type: decimal; }

.prose :where(ul):not(:where([class~=3D"not-prose"] *)) { list-style-type: =
disc; margin-top: 1.25em; margin-bottom: 1.25em; padding-left: 1.625em; }

.prose :where(ol > li):not(:where([class~=3D"not-prose"] *))::marker { font=
-weight: 400; color: var(--tw-prose-counters); }

.prose :where(ul > li):not(:where([class~=3D"not-prose"] *))::marker { colo=
r: var(--tw-prose-bullets); }

.prose :where(hr):not(:where([class~=3D"not-prose"] *)) { border-color: var=
(--tw-prose-hr); border-top-width: 1px; margin-top: 3em; margin-bottom: 3em=
; }

.prose :where(blockquote):not(:where([class~=3D"not-prose"] *)) { font-weig=
ht: 500; font-style: italic; color: var(--tw-prose-quotes); border-left-wid=
th: 0.25rem; border-left-color: var(--tw-prose-quote-borders); quotes: "=E2=
=80=9C" "=E2=80=9D" "=E2=80=98" "=E2=80=99"; margin-top: 1.6em; margin-bott=
om: 1.6em; padding-left: 1em; }

.prose :where(blockquote p:first-of-type):not(:where([class~=3D"not-prose"]=
 *))::before { content: open-quote; }

.prose :where(blockquote p:last-of-type):not(:where([class~=3D"not-prose"] =
*))::after { content: close-quote; }

.prose :where(h1):not(:where([class~=3D"not-prose"] *)) { color: var(--tw-p=
rose-headings); font-weight: 800; font-size: 2.25em; margin-top: 0px; margi=
n-bottom: 0.888889em; line-height: 1.11111; }

.prose :where(h1 strong):not(:where([class~=3D"not-prose"] *)) { font-weigh=
t: 900; color: inherit; }

.prose :where(h2):not(:where([class~=3D"not-prose"] *)) { color: var(--tw-p=
rose-headings); font-weight: 700; font-size: 1.5em; margin-top: 2em; margin=
-bottom: 1em; line-height: 1.33333; }

.prose :where(h2 strong):not(:where([class~=3D"not-prose"] *)) { font-weigh=
t: 800; color: inherit; }

.prose :where(h3):not(:where([class~=3D"not-prose"] *)) { color: var(--tw-p=
rose-headings); font-weight: 600; font-size: 1.25em; margin-top: 1.6em; mar=
gin-bottom: 0.6em; line-height: 1.6; }

.prose :where(h3 strong):not(:where([class~=3D"not-prose"] *)) { font-weigh=
t: 700; color: inherit; }

.prose :where(h4):not(:where([class~=3D"not-prose"] *)) { color: var(--tw-p=
rose-headings); font-weight: 600; margin-top: 1.5em; margin-bottom: 0.5em; =
line-height: 1.5; }

.prose :where(h4 strong):not(:where([class~=3D"not-prose"] *)) { font-weigh=
t: 700; color: inherit; }

.prose :where(img):not(:where([class~=3D"not-prose"] *)) { margin-top: 2em;=
 margin-bottom: 2em; }

.prose :where(figure > *):not(:where([class~=3D"not-prose"] *)) { margin-to=
p: 0px; margin-bottom: 0px; }

.prose :where(figcaption):not(:where([class~=3D"not-prose"] *)) { color: va=
r(--tw-prose-captions); font-size: 0.875em; line-height: 1.42857; margin-to=
p: 0.857143em; }

.prose :where(code):not(:where([class~=3D"not-prose"] *)) { color: var(--tw=
-prose-code); font-weight: 600; font-size: 0.875em; }

.prose :where(code):not(:where([class~=3D"not-prose"] *))::before { content=
: "`"; }

.prose :where(code):not(:where([class~=3D"not-prose"] *))::after { content:=
 "`"; }

.prose :where(a code):not(:where([class~=3D"not-prose"] *)) { color: var(--=
tw-prose-code); }

.prose :where(h1 code):not(:where([class~=3D"not-prose"] *)) { color: inher=
it; }

.prose :where(h2 code):not(:where([class~=3D"not-prose"] *)) { color: inher=
it; font-size: 0.875em; }

.prose :where(h3 code):not(:where([class~=3D"not-prose"] *)) { color: inher=
it; font-size: 0.9em; }

.prose :where(h4 code):not(:where([class~=3D"not-prose"] *)) { color: inher=
it; }

.prose :where(blockquote code):not(:where([class~=3D"not-prose"] *)) { colo=
r: inherit; }

.prose :where(thead th code):not(:where([class~=3D"not-prose"] *)) { color:=
 inherit; }

.prose :where(pre):not(:where([class~=3D"not-prose"] *)) { color: var(--tw-=
prose-pre-code); background-color: var(--tw-prose-pre-bg); overflow-x: auto=
; font-weight: 400; font-size: 0.875em; line-height: 1.71429; margin-top: 1=
.71429em; margin-bottom: 1.71429em; border-radius: 0.375rem; padding: 0.857=
143em 1.14286em; }

.prose :where(pre code):not(:where([class~=3D"not-prose"] *)) { background-=
color: transparent; border-width: 0px; border-radius: 0px; padding: 0px; fo=
nt-weight: inherit; color: inherit; font-size: inherit; font-family: inheri=
t; line-height: inherit; }

.prose :where(pre code):not(:where([class~=3D"not-prose"] *))::before { con=
tent: none; }

.prose :where(pre code):not(:where([class~=3D"not-prose"] *))::after { cont=
ent: none; }

.prose :where(table):not(:where([class~=3D"not-prose"] *)) { width: 100%; t=
able-layout: auto; text-align: left; margin-top: 2em; margin-bottom: 2em; f=
ont-size: 0.875em; line-height: 1.71429; }

.prose :where(thead):not(:where([class~=3D"not-prose"] *)) { border-bottom-=
width: 1px; border-bottom-color: var(--tw-prose-th-borders); }

.prose :where(thead th):not(:where([class~=3D"not-prose"] *)) { color: var(=
--tw-prose-headings); font-weight: 600; vertical-align: bottom; padding-rig=
ht: 0.571429em; padding-bottom: 0.571429em; padding-left: 0.571429em; }

.prose :where(tbody tr):not(:where([class~=3D"not-prose"] *)) { border-bott=
om-width: 1px; border-bottom-color: var(--tw-prose-td-borders); }

.prose :where(tbody tr:last-child):not(:where([class~=3D"not-prose"] *)) { =
border-bottom-width: 0px; }

.prose :where(tbody td):not(:where([class~=3D"not-prose"] *)) { vertical-al=
ign: baseline; }

.prose :where(tfoot):not(:where([class~=3D"not-prose"] *)) { border-top-wid=
th: 1px; border-top-color: var(--tw-prose-th-borders); }

.prose :where(tfoot td):not(:where([class~=3D"not-prose"] *)) { vertical-al=
ign: top; }

.prose { --tw-prose-body: rgba(var(--color-neutral-700), 1); --tw-prose-hea=
dings: rgba(var(--color-neutral-800), 1); --tw-prose-lead: rgba(var(--color=
-neutral-500), 1); --tw-prose-links: rgba(var(--color-primary-700), 1); --t=
w-prose-bold: rgba(var(--color-neutral-900), 1); --tw-prose-counters: rgba(=
var(--color-neutral-800), 1); --tw-prose-bullets: rgba(var(--color-neutral-=
500), 1); --tw-prose-hr: rgba(var(--color-neutral-200), 1); --tw-prose-quot=
es: rgba(var(--color-neutral-700), 1); --tw-prose-quote-borders: rgba(var(-=
-color-primary-200), 1); --tw-prose-captions: rgba(var(--color-neutral-500)=
, 1); --tw-prose-code: rgba(var(--color-secondary-700), 1); --tw-prose-pre-=
code: rgba(var(--color-neutral-700), 1); --tw-prose-pre-bg: rgba(var(--colo=
r-neutral-50), 1); --tw-prose-th-borders: rgba(var(--color-neutral-500), 1)=
; --tw-prose-td-borders: rgba(var(--color-neutral-300), 1); --tw-prose-inve=
rt-body: rgba(var(--color-neutral-300), 1); --tw-prose-invert-headings: rgb=
a(var(--color-neutral-50), 1); --tw-prose-invert-lead: rgba(var(--color-neu=
tral-500), 1); --tw-prose-invert-links: rgba(var(--color-primary-400), 1); =
--tw-prose-invert-bold: rgba(var(--color-neutral), 1); --tw-prose-invert-co=
unters: rgba(var(--color-neutral-400), 1); --tw-prose-invert-bullets: rgba(=
var(--color-neutral-600), 1); --tw-prose-invert-hr: rgba(var(--color-neutra=
l-500), 1); --tw-prose-invert-quotes: rgba(var(--color-neutral-200), 1); --=
tw-prose-invert-quote-borders: rgba(var(--color-primary-900), 1); --tw-pros=
e-invert-captions: rgba(var(--color-neutral-400), 1); --tw-prose-invert-cod=
e: rgba(var(--color-secondary-400), 1); --tw-prose-invert-pre-code: rgba(va=
r(--color-neutral-200), 1); --tw-prose-invert-pre-bg: rgba(var(--color-neut=
ral-700), 1); --tw-prose-invert-th-borders: rgba(var(--color-neutral-500), =
1); --tw-prose-invert-td-borders: rgba(var(--color-neutral-700), 1); font-s=
ize: 1rem; line-height: 1.75; }

.prose :where(video):not(:where([class~=3D"not-prose"] *)) { margin-top: 2e=
m; margin-bottom: 2em; }

.prose :where(figure):not(:where([class~=3D"not-prose"] *)) { margin-top: 2=
em; margin-bottom: 2em; }

.prose :where(li):not(:where([class~=3D"not-prose"] *)) { margin-top: 0.5em=
; margin-bottom: 0.5em; }

.prose :where(ol > li):not(:where([class~=3D"not-prose"] *)) { padding-left=
: 0.375em; }

.prose :where(ul > li):not(:where([class~=3D"not-prose"] *)) { padding-left=
: 0.375em; }

.prose :where(.prose > ul > li p):not(:where([class~=3D"not-prose"] *)) { m=
argin-top: 0.75em; margin-bottom: 0.75em; }

.prose :where(.prose > ul > li > :first-child):not(:where([class~=3D"not-pr=
ose"] *)) { margin-top: 1.25em; }

.prose :where(.prose > ul > li > :last-child):not(:where([class~=3D"not-pro=
se"] *)) { margin-bottom: 1.25em; }

.prose :where(.prose > ol > li > :first-child):not(:where([class~=3D"not-pr=
ose"] *)) { margin-top: 1.25em; }

.prose :where(.prose > ol > li > :last-child):not(:where([class~=3D"not-pro=
se"] *)) { margin-bottom: 1.25em; }

.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=3D"not-prose"]=
 *)) { margin-top: 0.75em; margin-bottom: 0.75em; }

.prose :where(hr + *):not(:where([class~=3D"not-prose"] *)) { margin-top: 0=
px; }

.prose :where(h2 + *):not(:where([class~=3D"not-prose"] *)) { margin-top: 0=
px; }

.prose :where(h3 + *):not(:where([class~=3D"not-prose"] *)) { margin-top: 0=
px; }

.prose :where(h4 + *):not(:where([class~=3D"not-prose"] *)) { margin-top: 0=
px; }

.prose :where(thead th:first-child):not(:where([class~=3D"not-prose"] *)) {=
 padding-left: 0px; }

.prose :where(thead th:last-child):not(:where([class~=3D"not-prose"] *)) { =
padding-right: 0px; }

.prose :where(tbody td, tfoot td):not(:where([class~=3D"not-prose"] *)) { p=
adding: 0.571429em; }

.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class=
~=3D"not-prose"] *)) { padding-left: 0px; }

.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=
=3D"not-prose"] *)) { padding-right: 0px; }

.prose :where(.prose > :first-child):not(:where([class~=3D"not-prose"] *)) =
{ margin-top: 0px; }

.prose :where(.prose > :last-child):not(:where([class~=3D"not-prose"] *)) {=
 margin-bottom: 0px; }

.prose :where(kbd):not(:where([class~=3D"not-prose"] *)) { background-color=
: rgba(var(--color-neutral-200),1); padding: 0.1rem 0.4rem; border-radius: =
0.25rem; font-size: 0.9rem; font-weight: 600; }

.prose :where(mark):not(:where([class~=3D"not-prose"] *)) { color: rgba(var=
(--color-neutral-800),1); background-color: rgba(var(--color-secondary-200)=
,1); padding: 0.1rem 0.2rem; border-radius: 0.12rem; }

body a, body button { transition-property: color, background-color, border-=
color, text-decoration-color, fill, stroke; transition-timing-function: cub=
ic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }

.icon svg { height: 1em; width: 1em; }

#search-query::-webkit-search-cancel-button, #search-query::-webkit-search-=
decoration, #search-query::-webkit-search-results-button, #search-query::-w=
ebkit-search-results-decoration { display: none; }

body:has(#menu-controller:checked) { height: 100vh; overflow: hidden; }

#menu-button:has(#menu-controller:checked) { visibility: hidden; }

#menu-controller:checked ~ #menu-wrapper { visibility: visible; opacity: 1;=
 }

[dir=3D"rtl"] .prose blockquote { border-left-width: 0px; border-right-widt=
h: 4px; padding-right: 1rem; }

[dir=3D"rtl"] .prose ul > li, [dir=3D"rtl"] .prose ol > li { margin-right: =
1.75rem; padding-left: 0px; padding-right: 0.5rem; }

[dir=3D"rtl"] .prose ol > li::before, [dir=3D"rtl"] .prose ul > li::before =
{ left: auto; right: 0.25rem; }

[dir=3D"rtl"] .prose thead td:first-child, [dir=3D"rtl"] .prose thead th:fi=
rst-child { padding-right: 0px; }

[dir=3D"rtl"] .prose thead td:last-child, [dir=3D"rtl"] .prose thead th:las=
t-child { padding-left: 0px; }

.prose div.min-w-0.max-w-prose > :first-child { margin-top: 0.75rem; }

.toc ul, .toc li { list-style-type: none; padding-left: 0px; padding-right:=
 0px; line-height: 1.375; }

[dir=3D"ltr"] .toc ul ul { padding-left: 1rem; }

[dir=3D"rtl"] .toc ul ul { padding-right: 1rem; }

.toc a { font-weight: 400; --tw-text-opacity: 1; color: rgba(var(--color-ne=
utral-700),var(--tw-text-opacity)); }

.dark .toc a { --tw-text-opacity: 1; color: rgba(var(--color-neutral-400),v=
ar(--tw-text-opacity)); }

[dir=3D"rtl"] .toc ul > li { margin-right: 0px; }

.highlight-wrapper { display: block; }

.highlight { position: relative; z-index: 0; }

.highlight:hover > .copy-button { visibility: visible; }

.copy-button { visibility: hidden; position: absolute; top: 0px; right: 0px=
; z-index: 10; width: 5rem; cursor: pointer; white-space: nowrap; border-bo=
ttom-left-radius: 0.375rem; border-top-right-radius: 0.375rem; --tw-bg-opac=
ity: 1; background-color: rgba(var(--color-neutral-200),var(--tw-bg-opacity=
)); padding-top: 0.25rem; padding-bottom: 0.25rem; font-family: ui-monospac=
e, SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new=
", monospace; font-size: 0.875rem; line-height: 1.25rem; --tw-text-opacity:=
 1; color: rgba(var(--color-neutral-700),var(--tw-text-opacity)); opacity: =
0.9; }

.dark .copy-button { --tw-bg-opacity: 1; background-color: rgba(var(--color=
-neutral-600),var(--tw-bg-opacity)); --tw-text-opacity: 1; color: rgba(var(=
--color-neutral-200),var(--tw-text-opacity)); }

.copy-button:hover, .copy-button:focus, .copy-button:active, .copy-button:a=
ctive:hover { --tw-bg-opacity: 1; background-color: rgba(var(--color-primar=
y-100),var(--tw-bg-opacity)); }

.dark .copy-button:hover, .dark .copy-button:focus, .dark .copy-button:acti=
ve, .dark .copy-button:active:hover { --tw-bg-opacity: 1; background-color:=
 rgba(var(--color-primary-600),var(--tw-bg-opacity)); }

.copy-textarea { position: absolute; z-index: -10; opacity: 0.05; }

.chroma { border-radius: 0.375rem; --tw-bg-opacity: 1; background-color: rg=
ba(var(--color-neutral-50),var(--tw-bg-opacity)); padding-top: 0.75rem; pad=
ding-bottom: 0.75rem; --tw-text-opacity: 1; color: rgba(var(--color-neutral=
-700),var(--tw-text-opacity)); }

.dark .chroma { --tw-bg-opacity: 1; background-color: rgba(var(--color-neut=
ral-700),var(--tw-bg-opacity)); --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-200),var(--tw-text-opacity)); }

.chroma pre { margin: 0px; padding: 0px; }

.chroma .lntable { margin: 0px; display: block; width: auto; overflow: auto=
; font-size: 1rem; line-height: 1.5rem; }

.chroma .lnt, .chroma .ln { margin-right: 0.5rem; padding-left: 0.5rem; pad=
ding-right: 0.5rem; --tw-text-opacity: 1; color: rgba(var(--color-neutral-6=
00),var(--tw-text-opacity)); }

.dark .chroma .lnt, .dark .chroma .ln { --tw-text-opacity: 1; color: rgba(v=
ar(--color-neutral-300),var(--tw-text-opacity)); }

.chroma .lntd { padding: 0px; vertical-align: top; }

.chroma .lntd:last-of-type { width: 100%; }

.chroma .hl { display: block; width: 100%; --tw-bg-opacity: 1; background-c=
olor: rgba(var(--color-primary-100),var(--tw-bg-opacity)); }

.dark .chroma .hl { --tw-bg-opacity: 1; background-color: rgba(var(--color-=
primary-900),var(--tw-bg-opacity)); }

.chroma .k, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .nc=
, .chroma .fm, .chroma .nn, .chroma .vc, .chroma .o { --tw-text-opacity: 1;=
 color: rgba(var(--color-primary-600),var(--tw-text-opacity)); }

.dark .chroma .k, .dark .chroma .kd, .dark .chroma .kn, .dark .chroma .kp, =
.dark .chroma .kr, .dark .chroma .nc, .dark .chroma .fm, .dark .chroma .nn,=
 .dark .chroma .vc, .dark .chroma .o { --tw-text-opacity: 1; color: rgba(va=
r(--color-primary-300),var(--tw-text-opacity)); }

.chroma .kc { font-weight: 600; --tw-text-opacity: 1; color: rgba(var(--col=
or-secondary-400),var(--tw-text-opacity)); }

.dark .chroma .kc { --tw-text-opacity: 1; color: rgba(var(--color-secondary=
-500),var(--tw-text-opacity)); }

.chroma .kt, .chroma .nv, .chroma .vi, .chroma .vm, .chroma .m, .chroma .mb=
, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo { --tw-te=
xt-opacity: 1; color: rgba(var(--color-secondary-400),var(--tw-text-opacity=
)); }

.dark .chroma .kt, .dark .chroma .nv, .dark .chroma .vi, .dark .chroma .vm,=
 .dark .chroma .m, .dark .chroma .mb, .dark .chroma .mf, .dark .chroma .mh,=
 .dark .chroma .mi, .dark .chroma .il, .dark .chroma .mo { --tw-text-opacit=
y: 1; color: rgba(var(--color-secondary-600),var(--tw-text-opacity)); }

.chroma .n, .chroma .nd, .chroma .ni, .chroma .nl { --tw-text-opacity: 1; c=
olor: rgba(var(--color-secondary-900),var(--tw-text-opacity)); }

.dark .chroma .n, .dark .chroma .nd, .dark .chroma .ni, .dark .chroma .nl {=
 --tw-text-opacity: 1; color: rgba(var(--color-secondary-200),var(--tw-text=
-opacity)); }

.chroma .na, .chroma .nb, .chroma .bp, .chroma .nx, .chroma .py, .chroma .n=
t { --tw-text-opacity: 1; color: rgba(var(--color-secondary-800),var(--tw-t=
ext-opacity)); }

.dark .chroma .na, .dark .chroma .nb, .dark .chroma .bp, .dark .chroma .nx,=
 .dark .chroma .py, .dark .chroma .nt { --tw-text-opacity: 1; color: rgba(v=
ar(--color-secondary-300),var(--tw-text-opacity)); }

.chroma .no, .chroma .ne, .chroma .vg { font-weight: 600; --tw-text-opacity=
: 1; color: rgba(var(--color-secondary-400),var(--tw-text-opacity)); }

.dark .chroma .no, .dark .chroma .ne, .dark .chroma .vg { --tw-text-opacity=
: 1; color: rgba(var(--color-secondary-500),var(--tw-text-opacity)); }

.chroma .nf { --tw-text-opacity: 1; color: rgba(var(--color-secondary-600),=
var(--tw-text-opacity)); }

.dark .chroma .nf { --tw-text-opacity: 1; color: rgba(var(--color-secondary=
-500),var(--tw-text-opacity)); }

.chroma .l, .chroma .ld, .chroma .s, .chroma .sa, .chroma .sb, .chroma .sc,=
 .chroma .dl, .chroma .sd, .chroma .s2, .chroma .sh, .chroma .si, .chroma .=
sx, .chroma .s1, .chroma .gi, .chroma .go, .chroma .gp { --tw-text-opacity:=
 1; color: rgba(var(--color-primary-800),var(--tw-text-opacity)); }

.dark .chroma .l, .dark .chroma .ld, .dark .chroma .s, .dark .chroma .sa, .=
dark .chroma .sb, .dark .chroma .sc, .dark .chroma .dl, .dark .chroma .sd, =
.dark .chroma .s2, .dark .chroma .sh, .dark .chroma .si, .dark .chroma .sx,=
 .dark .chroma .s1, .dark .chroma .gi, .dark .chroma .go, .dark .chroma .gp=
 { --tw-text-opacity: 1; color: rgba(var(--color-primary-400),var(--tw-text=
-opacity)); }

.chroma .se { font-weight: 600; --tw-text-opacity: 1; color: rgba(var(--col=
or-secondary-400),var(--tw-text-opacity)); }

.dark .chroma .se { --tw-text-opacity: 1; color: rgba(var(--color-secondary=
-500),var(--tw-text-opacity)); }

.chroma .sr, .chroma .ss { font-weight: 600; --tw-text-opacity: 1; color: r=
gba(var(--color-primary-800),var(--tw-text-opacity)); }

.dark .chroma .sr, .dark .chroma .ss { --tw-text-opacity: 1; color: rgba(va=
r(--color-primary-400),var(--tw-text-opacity)); }

.chroma .ow { font-weight: 600; --tw-text-opacity: 1; color: rgba(var(--col=
or-primary-400),var(--tw-text-opacity)); }

.dark .chroma .ow { --tw-text-opacity: 1; color: rgba(var(--color-primary-6=
00),var(--tw-text-opacity)); }

.chroma .c, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .cp, .chroma .cp=
f { font-style: italic; --tw-text-opacity: 1; color: rgba(var(--color-neutr=
al-500),var(--tw-text-opacity)); }

.dark .chroma .c, .dark .chroma .cm, .dark .chroma .c1, .dark .chroma .cs, =
.dark .chroma .cp, .dark .chroma .cpf { --tw-text-opacity: 1; color: rgba(v=
ar(--color-neutral-400),var(--tw-text-opacity)); }

.chroma .ch { font-weight: 600; font-style: italic; --tw-text-opacity: 1; c=
olor: rgba(var(--color-neutral-500),var(--tw-text-opacity)); }

.dark .chroma .ch { --tw-text-opacity: 1; color: rgba(var(--color-neutral-4=
00),var(--tw-text-opacity)); }

.chroma .ge { font-style: italic; }

.chroma .gh { font-weight: 600; --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-500),var(--tw-text-opacity)); }

.chroma .gs { font-weight: 600; }

.chroma .gu, .chroma .gt { --tw-text-opacity: 1; color: rgba(var(--color-ne=
utral-500),var(--tw-text-opacity)); }

.chroma .gl { text-decoration-line: underline; }

.pointer-events-none { pointer-events: none; }

.pointer-events-auto { pointer-events: auto; }

.invisible { visibility: hidden; }

.fixed { position: fixed; }

.absolute { position: absolute; }

.relative { position: relative; }

.sticky { position: sticky; }

.inset-0 { inset: 0px; }

.bottom-0 { bottom: 0px; }

.top-0 { top: 0px; }

.top-20 { top: 5rem; }

.top-\[100vh\] { top: 100vh; }

.top-\[calc\(100vh-5\.5rem\)\] { top: calc(-5.5rem + 100vh); }

.z-10 { z-index: 10; }

.z-30 { z-index: 30; }

.z-40 { z-index: 40; }

.z-50 { z-index: 50; }

.order-first { order: -9999; }

.m-1 { margin: 0.25rem; }

.m-auto { margin: auto; }

.-mx-2 { margin-left: -0.5rem; margin-right: -0.5rem; }

.mx-1 { margin-left: 0.25rem; margin-right: 0.25rem; }

.mx-auto { margin-left: auto; margin-right: auto; }

.my-0 { margin-top: 0px; margin-bottom: 0px; }

.my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; }

.my-3 { margin-top: 0.75rem; margin-bottom: 0.75rem; }

.\!mb-0 { margin-bottom: 0px !important; }

.\!mb-9 { margin-bottom: 2.25rem !important; }

.\!mt-0 { margin-top: 0px !important; }

.-mb-1 { margin-bottom: -0.25rem; }

.-mt-3 { margin-top: -0.75rem; }

.-mt-4 { margin-top: -1rem; }

.mb-1 { margin-bottom: 0.25rem; }

.mb-12 { margin-bottom: 3rem; }

.mb-2 { margin-bottom: 0.5rem; }

.mb-3 { margin-bottom: 0.75rem; }

.mb-6 { margin-bottom: 1.5rem; }

.mb-\[2px\] { margin-bottom: 2px; }

.ml-2 { margin-left: 0.5rem; }

.mr-2 { margin-right: 0.5rem; }

.mt-0 { margin-top: 0px; }

.mt-1 { margin-top: 0.25rem; }

.mt-10 { margin-top: 2.5rem; }

.mt-12 { margin-top: 3rem; }

.mt-6 { margin-top: 1.5rem; }

.mt-8 { margin-top: 2rem; }

.mt-\[0\.1rem\] { margin-top: 0.1rem; }

.block { display: block; }

.inline-block { display: inline-block; }

.inline { display: inline; }

.flex { display: flex; }

.hidden { display: none; }

.h-12 { height: 3rem; }

.h-24 { height: 6rem; }

.h-36 { height: 9rem; }

.h-8 { height: 2rem; }

.h-full { height: 100%; }

.h-screen { height: 100vh; }

.max-h-\[10rem\] { max-height: 10rem; }

.max-h-\[4\.5rem\] { max-height: 4.5rem; }

.min-h-0 { min-height: 0px; }

.w-12 { width: 3rem; }

.w-24 { width: 6rem; }

.w-36 { width: 9rem; }

.w-6 { width: 1.5rem; }

.w-8 { width: 2rem; }

.w-full { width: 100%; }

.w-screen { width: 100vw; }

.min-w-0 { min-width: 0px; }

.min-w-\[1\.8rem\] { min-width: 1.8rem; }

.min-w-\[2\.4rem\] { min-width: 2.4rem; }

.max-w-3xl { max-width: 48rem; }

.max-w-7xl { max-width: 80rem; }

.max-w-\[10rem\] { max-width: 10rem; }

.max-w-\[6rem\] { max-width: 6rem; }

.max-w-full { max-width: 100%; }

.max-w-prose { max-width: 65ch; }

.flex-auto { flex: 1 1 auto; }

.flex-none { flex: 0 0 auto; }

.grow { flex-grow: 1; }

.-translate-y-8 { --tw-translate-y: -2rem; transform: translate(var(--tw-tr=
anslate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-ske=
w-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-=
y)); }

.cursor-default { cursor: default; }

.cursor-pointer { cursor: pointer; }

.list-none { list-style-type: none; }

.appearance-none { appearance: none; }

.flex-row { flex-direction: row; }

.flex-col { flex-direction: column; }

.flex-wrap { flex-wrap: wrap; }

.items-start { align-items: flex-start; }

.items-center { align-items: center; }

.justify-center { justify-content: center; }

.justify-between { justify-content: space-between; }

.place-self-center { place-self: center; }

.self-center { align-self: center; }

.overflow-auto { overflow: auto; }

.overflow-hidden { overflow: hidden; }

.overflow-visible { overflow: visible; }

.scroll-smooth { scroll-behavior: smooth; }

.\!rounded-md { border-radius: 0.375rem !important; }

.rounded { border-radius: 0.25rem; }

.rounded-full { border-radius: 9999px; }

.rounded-lg { border-radius: 0.5rem; }

.rounded-md { border-radius: 0.375rem; }

.rounded-b-lg { border-bottom-right-radius: 0.5rem; border-bottom-left-radi=
us: 0.5rem; }

.border { border-width: 1px; }

.border-t { border-top-width: 1px; }

.border-dotted { border-style: dotted; }

.border-neutral-200 { --tw-border-opacity: 1; border-color: rgba(var(--colo=
r-neutral-200),var(--tw-border-opacity)); }

.border-neutral-300 { --tw-border-opacity: 1; border-color: rgba(var(--colo=
r-neutral-300),var(--tw-border-opacity)); }

.border-neutral-400 { --tw-border-opacity: 1; border-color: rgba(var(--colo=
r-neutral-400),var(--tw-border-opacity)); }

.border-primary-400 { --tw-border-opacity: 1; border-color: rgba(var(--colo=
r-primary-400),var(--tw-border-opacity)); }

.bg-neutral { --tw-bg-opacity: 1; background-color: rgba(var(--color-neutra=
l),var(--tw-bg-opacity)); }

.bg-neutral-100 { --tw-bg-opacity: 1; background-color: rgba(var(--color-ne=
utral-100),var(--tw-bg-opacity)); }

.bg-neutral-100\/50 { background-color: rgba(var(--color-neutral-100),.5); =
}

.bg-neutral-300 { --tw-bg-opacity: 1; background-color: rgba(var(--color-ne=
utral-300),var(--tw-bg-opacity)); }

.bg-neutral-500\/50 { background-color: rgba(var(--color-neutral-500),.5); =
}

.bg-neutral\/50 { background-color: rgba(var(--color-neutral),.5); }

.bg-primary-100 { --tw-bg-opacity: 1; background-color: rgba(var(--color-pr=
imary-100),var(--tw-bg-opacity)); }

.bg-primary-200 { --tw-bg-opacity: 1; background-color: rgba(var(--color-pr=
imary-200),var(--tw-bg-opacity)); }

.bg-primary-600 { --tw-bg-opacity: 1; background-color: rgba(var(--color-pr=
imary-600),var(--tw-bg-opacity)); }

.bg-transparent { background-color: transparent; }

.object-scale-down { object-fit: scale-down; }

.object-left { object-position: left center; }

.p-1 { padding: 0.25rem; }

.p-4 { padding: 1rem; }

.px-0 { padding-left: 0px; padding-right: 0px; }

.px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }

.px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }

.px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }

.px-4 { padding-left: 1rem; padding-right: 1rem; }

.px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }

.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }

.py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; }

.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }

.py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }

.py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; }

.py-8 { padding-top: 2rem; padding-bottom: 2rem; }

.py-\[1px\] { padding-top: 1px; padding-bottom: 1px; }

.pb-4 { padding-bottom: 1rem; }

.pl-2 { padding-left: 0.5rem; }

.pr-4 { padding-right: 1rem; }

.pt-3 { padding-top: 0.75rem; }

.pt-4 { padding-top: 1rem; }

.pt-8 { padding-top: 2rem; }

.text-center { text-align: center; }

.text-right { text-align: right; }

.align-top { vertical-align: top; }

.align-text-bottom { vertical-align: text-bottom; }

.text-2xl { font-size: 1.5rem; line-height: 2rem; }

.text-4xl { font-size: 2.25rem; line-height: 2.5rem; }

.text-\[0\.6rem\] { font-size: 0.6rem; }

.text-base { font-size: 1rem; line-height: 1.5rem; }

.text-lg { font-size: 1.125rem; line-height: 1.75rem; }

.text-sm { font-size: 0.875rem; line-height: 1.25rem; }

.text-xl { font-size: 1.25rem; line-height: 1.75rem; }

.text-xs { font-size: 0.75rem; line-height: 1rem; }

.font-bold { font-weight: 700; }

.font-extrabold { font-weight: 800; }

.font-medium { font-weight: 500; }

.font-normal { font-weight: 400; }

.font-semibold { font-weight: 600; }

.uppercase { text-transform: uppercase; }

.italic { font-style: italic; }

.leading-3 { line-height: 0.75rem; }

.leading-6 { line-height: 1.5rem; }

.leading-7 { line-height: 1.75rem; }

.leading-relaxed { line-height: 1.625; }

.\!text-neutral { --tw-text-opacity: 1 !important; color: rgba(var(--color-=
neutral),var(--tw-text-opacity)) !important; }

.text-neutral-400 { --tw-text-opacity: 1; color: rgba(var(--color-neutral-4=
00),var(--tw-text-opacity)); }

.text-neutral-500 { --tw-text-opacity: 1; color: rgba(var(--color-neutral-5=
00),var(--tw-text-opacity)); }

.text-neutral-700 { --tw-text-opacity: 1; color: rgba(var(--color-neutral-7=
00),var(--tw-text-opacity)); }

.text-neutral-800 { --tw-text-opacity: 1; color: rgba(var(--color-neutral-8=
00),var(--tw-text-opacity)); }

.text-neutral-900 { --tw-text-opacity: 1; color: rgba(var(--color-neutral-9=
00),var(--tw-text-opacity)); }

.text-primary-400 { --tw-text-opacity: 1; color: rgba(var(--color-primary-4=
00),var(--tw-text-opacity)); }

.text-primary-500 { --tw-text-opacity: 1; color: rgba(var(--color-primary-5=
00),var(--tw-text-opacity)); }

.text-primary-600 { --tw-text-opacity: 1; color: rgba(var(--color-primary-6=
00),var(--tw-text-opacity)); }

.text-primary-700 { --tw-text-opacity: 1; color: rgba(var(--color-primary-7=
00),var(--tw-text-opacity)); }

.\!no-underline { text-decoration-line: none !important; }

.decoration-neutral-300 { text-decoration-color: rgba(var(--color-neutral-3=
00),1); }

.decoration-primary-500 { text-decoration-color: rgba(var(--color-primary-5=
00),1); }

.opacity-0 { opacity: 0; }

.shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px=
 rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-co=
lor), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offs=
et-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow); }

.backdrop-blur { --tw-backdrop-blur: blur(8px); backdrop-filter: var(--tw-b=
ackdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--=
tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert=
)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sep=
ia); }

.backdrop-blur-sm { --tw-backdrop-blur: blur(4px); backdrop-filter: var(--t=
w-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var=
(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-inv=
ert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-=
sepia); }

.transition-colors { transition-property: color, background-color, border-c=
olor, text-decoration-color, fill, stroke; transition-timing-function: cubi=
c-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }

.transition-opacity { transition-property: opacity; transition-timing-funct=
ion: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }

.transition-transform { transition-property: transform; transition-timing-f=
unction: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }

.dark .dark\:prose-invert { --tw-prose-body: var(--tw-prose-invert-body); -=
-tw-prose-headings: var(--tw-prose-invert-headings); --tw-prose-lead: var(-=
-tw-prose-invert-lead); --tw-prose-links: var(--tw-prose-invert-links); --t=
w-prose-bold: var(--tw-prose-invert-bold); --tw-prose-counters: var(--tw-pr=
ose-invert-counters); --tw-prose-bullets: var(--tw-prose-invert-bullets); -=
-tw-prose-hr: var(--tw-prose-invert-hr); --tw-prose-quotes: var(--tw-prose-=
invert-quotes); --tw-prose-quote-borders: var(--tw-prose-invert-quote-borde=
rs); --tw-prose-captions: var(--tw-prose-invert-captions); --tw-prose-code:=
 var(--tw-prose-invert-code); --tw-prose-pre-code: var(--tw-prose-invert-pr=
e-code); --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); --tw-prose-th-bo=
rders: var(--tw-prose-invert-th-borders); --tw-prose-td-borders: var(--tw-p=
rose-invert-td-borders); }

.dark .dark\:prose-invert :where(a):not(:where([class~=3D"not-prose"] *)) {=
 text-decoration-color: rgba(var(--color-neutral-600),1); }

.dark .dark\:prose-invert :where(kbd):not(:where([class~=3D"not-prose"] *))=
 { color: rgba(var(--color-neutral-200),1); background-color: rgba(var(--co=
lor-neutral-700),1); }

.dark .dark\:prose-invert :where(mark):not(:where([class~=3D"not-prose"] *)=
) { background-color: rgba(var(--color-secondary-400),1); }

.first\:mt-8:first-child { margin-top: 2rem; }

.hover\:scale-125:hover { --tw-scale-x: 1.25; --tw-scale-y: 1.25; transform=
: translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rot=
ate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x)=
)scaleY(var(--tw-scale-y)); }

.hover\:border-primary-300:hover { --tw-border-opacity: 1; border-color: rg=
ba(var(--color-primary-300),var(--tw-border-opacity)); }

.hover\:\!bg-primary-500:hover { --tw-bg-opacity: 1 !important; background-=
color: rgba(var(--color-primary-500),var(--tw-bg-opacity)) !important; }

.hover\:bg-primary-100:hover { --tw-bg-opacity: 1; background-color: rgba(v=
ar(--color-primary-100),var(--tw-bg-opacity)); }

.hover\:bg-primary-500:hover { --tw-bg-opacity: 1; background-color: rgba(v=
ar(--color-primary-500),var(--tw-bg-opacity)); }

.hover\:bg-primary-600:hover { --tw-bg-opacity: 1; background-color: rgba(v=
ar(--color-primary-600),var(--tw-bg-opacity)); }

.hover\:text-neutral:hover { --tw-text-opacity: 1; color: rgba(var(--color-=
neutral),var(--tw-text-opacity)); }

.hover\:text-primary-500:hover { --tw-text-opacity: 1; color: rgba(var(--co=
lor-primary-500),var(--tw-text-opacity)); }

.hover\:text-primary-600:hover { --tw-text-opacity: 1; color: rgba(var(--co=
lor-primary-600),var(--tw-text-opacity)); }

.hover\:text-primary-700:hover { --tw-text-opacity: 1; color: rgba(var(--co=
lor-primary-700),var(--tw-text-opacity)); }

.hover\:underline:hover { text-decoration-line: underline; }

.hover\:decoration-primary-400:hover { text-decoration-color: rgba(var(--co=
lor-primary-400),1); }

.hover\:decoration-2:hover { text-decoration-thickness: 2px; }

.hover\:underline-offset-2:hover { text-underline-offset: 2px; }

.focus\:translate-y-0:focus { --tw-translate-y: 0px; transform: translate(v=
ar(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(va=
r(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(-=
-tw-scale-y)); }

.focus\:bg-primary-100:focus { --tw-bg-opacity: 1; background-color: rgba(v=
ar(--color-primary-100),var(--tw-bg-opacity)); }

.focus\:outline-dotted:focus { outline-style: dotted; }

.focus\:outline-2:focus { outline-width: 2px; }

.focus\:outline-transparent:focus { outline-color: transparent; }

.group:hover .group-hover\:-translate-x-\[2px\] { --tw-translate-x: -2px; t=
ransform: translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(=
--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-=
scale-x))scaleY(var(--tw-scale-y)); }

.group:hover .group-hover\:translate-x-\[2px\] { --tw-translate-x: 2px; tra=
nsform: translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--=
tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-sc=
ale-x))scaleY(var(--tw-scale-y)); }

.group:hover .group-hover\:text-primary-300 { --tw-text-opacity: 1; color: =
rgba(var(--color-primary-300),var(--tw-text-opacity)); }

.group:hover .group-hover\:text-primary-600 { --tw-text-opacity: 1; color: =
rgba(var(--color-primary-600),var(--tw-text-opacity)); }

.group:hover .group-hover\:underline { text-decoration-line: underline; }

.group:hover .group-hover\:decoration-primary-500 { text-decoration-color: =
rgba(var(--color-primary-500),1); }

.group:hover .group-hover\:decoration-2 { text-decoration-thickness: 2px; }

.group:hover .group-hover\:underline-offset-2 { text-underline-offset: 2px;=
 }

.group:hover .group-hover\:opacity-100 { opacity: 1; }

[dir=3D"ltr"] .ltr\:-left-6 { left: -1.5rem; }

[dir=3D"ltr"] .ltr\:right-0 { right: 0px; }

[dir=3D"ltr"] .ltr\:-ml-5 { margin-left: -1.25rem; }

[dir=3D"ltr"] .ltr\:ml-1 { margin-left: 0.25rem; }

[dir=3D"ltr"] .ltr\:ml-2 { margin-left: 0.5rem; }

[dir=3D"ltr"] .ltr\:mr-14 { margin-right: 3.5rem; }

[dir=3D"ltr"] .ltr\:mr-4 { margin-right: 1rem; }

[dir=3D"ltr"] .ltr\:block { display: block; }

[dir=3D"ltr"] .ltr\:inline { display: inline; }

[dir=3D"ltr"] .ltr\:hidden { display: none; }

[dir=3D"ltr"] .ltr\:border-l { border-left-width: 1px; }

[dir=3D"ltr"] .ltr\:pl-5 { padding-left: 1.25rem; }

[dir=3D"ltr"] .ltr\:pr-2 { padding-right: 0.5rem; }

[dir=3D"ltr"] .ltr\:pr-3 { padding-right: 0.75rem; }

[dir=3D"ltr"] .ltr\:text-right { text-align: right; }

[dir=3D"rtl"] .rtl\:-right-6 { right: -1.5rem; }

[dir=3D"rtl"] .rtl\:left-0 { left: 0px; }

[dir=3D"rtl"] .rtl\:-mr-5 { margin-right: -1.25rem; }

[dir=3D"rtl"] .rtl\:ml-14 { margin-left: 3.5rem; }

[dir=3D"rtl"] .rtl\:ml-4 { margin-left: 1rem; }

[dir=3D"rtl"] .rtl\:mr-1 { margin-right: 0.25rem; }

[dir=3D"rtl"] .rtl\:mr-2 { margin-right: 0.5rem; }

[dir=3D"rtl"] .rtl\:block { display: block; }

[dir=3D"rtl"] .rtl\:inline { display: inline; }

[dir=3D"rtl"] .rtl\:hidden { display: none; }

[dir=3D"rtl"] .rtl\:border-r { border-right-width: 1px; }

[dir=3D"rtl"] .rtl\:pl-2 { padding-left: 0.5rem; }

[dir=3D"rtl"] .rtl\:pl-3 { padding-left: 0.75rem; }

[dir=3D"rtl"] .rtl\:pr-5 { padding-right: 1.25rem; }

[dir=3D"rtl"] .rtl\:text-left { text-align: left; }

.dark .dark\:inline { display: inline; }

.dark .dark\:flex { display: flex; }

.dark .dark\:hidden { display: none; }

.dark .dark\:border-neutral-600 { --tw-border-opacity: 1; border-color: rgb=
a(var(--color-neutral-600),var(--tw-border-opacity)); }

.dark .dark\:border-neutral-700 { --tw-border-opacity: 1; border-color: rgb=
a(var(--color-neutral-700),var(--tw-border-opacity)); }

.dark .dark\:border-primary-600 { --tw-border-opacity: 1; border-color: rgb=
a(var(--color-primary-600),var(--tw-border-opacity)); }

.dark .dark\:bg-neutral-600 { --tw-bg-opacity: 1; background-color: rgba(va=
r(--color-neutral-600),var(--tw-bg-opacity)); }

.dark .dark\:bg-neutral-700 { --tw-bg-opacity: 1; background-color: rgba(va=
r(--color-neutral-700),var(--tw-bg-opacity)); }

.dark .dark\:bg-neutral-800 { --tw-bg-opacity: 1; background-color: rgba(va=
r(--color-neutral-800),var(--tw-bg-opacity)); }

.dark .dark\:bg-neutral-800\/50 { background-color: rgba(var(--color-neutra=
l-800),.5); }

.dark .dark\:bg-neutral-900\/50 { background-color: rgba(var(--color-neutra=
l-900),.5); }

.dark .dark\:bg-primary-400 { --tw-bg-opacity: 1; background-color: rgba(va=
r(--color-primary-400),var(--tw-bg-opacity)); }

.dark .dark\:bg-primary-800 { --tw-bg-opacity: 1; background-color: rgba(va=
r(--color-primary-800),var(--tw-bg-opacity)); }

.dark .dark\:bg-primary-900 { --tw-bg-opacity: 1; background-color: rgba(va=
r(--color-primary-900),var(--tw-bg-opacity)); }

.dark .dark\:text-neutral { --tw-text-opacity: 1; color: rgba(var(--color-n=
eutral),var(--tw-text-opacity)); }

.dark .dark\:text-neutral-100 { --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-100),var(--tw-text-opacity)); }

.dark .dark\:text-neutral-300 { --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-300),var(--tw-text-opacity)); }

.dark .dark\:text-neutral-400 { --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-400),var(--tw-text-opacity)); }

.dark .dark\:text-neutral-500 { --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-500),var(--tw-text-opacity)); }

.dark .dark\:text-neutral-800 { --tw-text-opacity: 1; color: rgba(var(--col=
or-neutral-800),var(--tw-text-opacity)); }

.dark .dark\:text-primary-400 { --tw-text-opacity: 1; color: rgba(var(--col=
or-primary-400),var(--tw-text-opacity)); }

.dark .dark\:hover\:border-primary-600:hover { --tw-border-opacity: 1; bord=
er-color: rgba(var(--color-primary-600),var(--tw-border-opacity)); }

.dark .dark\:hover\:\!bg-primary-700:hover { --tw-bg-opacity: 1 !important;=
 background-color: rgba(var(--color-primary-700),var(--tw-bg-opacity)) !imp=
ortant; }

.dark .dark\:hover\:bg-primary-400:hover { --tw-bg-opacity: 1; background-c=
olor: rgba(var(--color-primary-400),var(--tw-bg-opacity)); }

.dark .dark\:hover\:bg-primary-900:hover { --tw-bg-opacity: 1; background-c=
olor: rgba(var(--color-primary-900),var(--tw-bg-opacity)); }

.dark .dark\:hover\:text-neutral-800:hover { --tw-text-opacity: 1; color: r=
gba(var(--color-neutral-800),var(--tw-text-opacity)); }

.dark .dark\:hover\:text-primary-400:hover { --tw-text-opacity: 1; color: r=
gba(var(--color-primary-400),var(--tw-text-opacity)); }

.dark .dark\:focus\:bg-primary-900:focus { --tw-bg-opacity: 1; background-c=
olor: rgba(var(--color-primary-900),var(--tw-bg-opacity)); }

.dark .group:hover .dark\:group-hover\:text-neutral-700 { --tw-text-opacity=
: 1; color: rgba(var(--color-neutral-700),var(--tw-text-opacity)); }

.dark .group:hover .dark\:group-hover\:text-primary-400 { --tw-text-opacity=
: 1; color: rgba(var(--color-primary-400),var(--tw-text-opacity)); }

@media print {
  .print\:hidden { display: none; }
}

@media (min-width: 640px) {
  .sm\:mb-0 { margin-bottom: 0px; }
  .sm\:flex { display: flex; }
  .sm\:hidden { display: none; }
  .sm\:max-h-\[7\.5rem\] { max-height: 7.5rem; }
  .sm\:w-1\/2 { width: 50%; }
  .sm\:w-40 { width: 10rem; }
  .sm\:max-w-\[10rem\] { max-width: 10rem; }
  .sm\:flex-row { flex-direction: row; }
  .sm\:items-center { align-items: center; }
  .sm\:p-6 { padding: 1.5rem; }
  .sm\:px-14 { padding-left: 3.5rem; padding-right: 3.5rem; }
  .sm\:py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; }
  .sm\:pr-6 { padding-right: 1.5rem; }
  .sm\:pt-10 { padding-top: 2.5rem; }
  .sm\:text-lg { font-size: 1.125rem; line-height: 1.75rem; }
  [dir=3D"ltr"] .ltr\:sm\:mr-7 { margin-right: 1.75rem; }
  [dir=3D"ltr"] .ltr\:sm\:last\:mr-0:last-child { margin-right: 0px; }
  [dir=3D"rtl"] .rtl\:sm\:ml-7 { margin-left: 1.75rem; }
  [dir=3D"rtl"] .rtl\:sm\:last\:ml-0:last-child { margin-left: 0px; }
}

@media (min-width: 768px) {
  .md\:w-1\/3 { width: 33.3333%; }
  .md\:p-\[10vh\] { padding: 10vh; }
  .md\:px-24 { padding-left: 6rem; padding-right: 6rem; }
}

@media (min-width: 1024px) {
  .lg\:sticky { position: sticky; }
  .lg\:top-10 { top: 2.5rem; }
  .lg\:order-last { order: 9999; }
  .lg\:hidden { display: none; }
  .lg\:w-1\/4 { width: 25%; }
  .lg\:max-w-xs { max-width: 20rem; }
  .lg\:flex-row { flex-direction: row; }
  .lg\:p-\[12vh\] { padding: 12vh; }
  .lg\:px-32 { padding-left: 8rem; padding-right: 8rem; }
  [dir=3D"ltr"] .ltr\:lg\:pl-8 { padding-left: 2rem; }
  [dir=3D"rtl"] .rtl\:lg\:pr-8 { padding-right: 2rem; }
}

@media (min-width: 1280px) {
  .xl\:w-1\/5 { width: 20%; }
}
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: https://blog.cong.moe/post/2021-03-16-grpc-on-typescript/feature-grpc-on-typescript_hu6ff6336af5f6f71e945c1f68861ded36_208434_660x0_resize_q75_box.jpeg

/9j/2wCEAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx
NDQ0Hyc5PTgyPC4zNDIBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIA3AFKAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAA
AAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGh
CCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV
1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQAC
AQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXx
FxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqS
k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T1
9vf4+fr/2gAMAwEAAhEDEQA/AONP4UcYpaTvVCE+lJx2/OlNJQAfpRj60YoFACcelL3o9aCaAAUE
dKKO1AB+Ao/z0oI6UZz07UAH5mj8aO1HTmgBe1Lj/IooHAzQAvSkxRnNLxmgA4yO1KOBx+opAccc
UZ9KYCjnHal5GKQ5I4pe9ABnntS5570dc8AUdvegA74zxSjG7qM+maBxQOo7UDDqO1LwM4oJwMY/
KjOPegA/AfnSZ49qXApM59h9aADIPQ0n1/lS/wCetJnikAmeg7ZppJ/GndaY31oAQnNMPIp55FMY
5Ge9JgRt1ph6U9qYelIBp6U2nGm0AFFFFABQKKKAFyaXPrTR1p2aAHA+tHNNzS5ppiHgkClBxUea
epoAfSscqQaZkYozkUwG5ooPBooAQjvTDzUnemkdqTGJRRRSAKWkpaAClBxSUUAOoA5zRRVIQ8c0
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
pBTAWiiigAoopD1oAWikJpKAFJozSGkoAXOKM03NIaVwHE0maSikMKKKKACiiigAooooAKKKAM0A
ApcUtFABRRRTQBS0UUxC5oHrSDilzQAE0maDzRQAh4pM0p6U2kxhRRRSAKKXGaQjFABRRRQAUUUU
AFFFFABRRRQAUUUUALmlptLmncBaKKKYgpMUuKWgBuKBS0UDG0o6UppvQ0XAdRQDmkJpXAWikHSj
NIBKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAUUfSkpc0AKOlFJmkzigA70UUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUooFLTQBThTaWmIdRSZpaAEJpDRSUAGa
bSmkpDCiiikAUUpFGKAEopelJQAYNFLmkoAKKKKACiiigAooooAKKKKAHClpoNKKaEOzS00UvfvT
AU9KKBxR1OaACiiigAooooAKKKKAE4oyKDTaAFzSUhNGaAFBpc0zNKDSuMdmnZpmaWmIcaKbmjvQ
AuRRn0pKM0AKTxSUZpKAFzRmkooAXNLkU2jNADuKXNNooAXOO1Lk+lNp1AB17UUUUAGfaiiigAop
DxS9qACiiigBOhzmkPWnUmKAEooooASiiikwEIpKdSEUhiUUUUAFFFFABRS4oxQAmDSgUtFABRRR
QAUUUtMAooopiCiiigAoxRRmgAoNFFADT0pKdSEUmMSiiikAUUUUAFFFFABRRRQAUUUUAFFFFABR
RRQAUUUUAKDS02lHSmgFpaaDmlpiCiiigBCaO1JRUjCig0UAFOx7U2ncUANooooAKKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooAKUUAUtNIApaKKYgooooAKDzRRQAUh6UtJQA2ilNJUjClBxSUUALmjNJRQAuaSiigAooo
oAKKKKACiiigAooowaACijBp2KAEApRRilxTSEKBS0UUwCiiigAooooAKKKKACg8UhNNJoAUmmmj
NJSbGFFFFIAooooAKXNJRQAuaM0lFO4WHdaTNJRSAXNGaSigABxS5pKB1oAdRRRVCFooooAKKM0Z
oAXNKTimZozQA7NGabRmgB2aCabmjNAC0UmaM0rgLRmkzSZFFwHZpKTIoyKLgLRRRTAKKKKACiii
gAoopaAEopaKAExRilooATFLRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSUtJQAEZptOopWGNopSKT
BpAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACg4ozSUUXAXNKDmm0op3ACaSiikAUUUUAFFF
OoAbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
oOaADFGKWinYQmKSnUHmiwxtFLijFIBKKKKAClApKdQAAU4Cm04VQgIoxxS0UANopcUlABRRRQAU
lLRQAmM02n0mKAG0U6jn0pWGNopcUtKwDaKdRTsA2lxS0UWATFGKXFLQA3FKBS0U7BcTFFLRQISl
xS4paAEApcYoooAMUUmeaM0ALRSE4pKAFJoBpCeaSgB2c0mabmgk0rgBNJmiikMKKKKACiiigAoo
ooAKKKKACiiigAooooAKKXFGKAEopQMUtABRRSE5p3AWikzxSUXAUn0ozSUUgFJozSUUALmkoooA
KM0UUAFFFFABRRRQAUUUUALmjNJRQAoNLTaKdwHUUgOaWmIKWkpaAFAoxQDS0AJijFLRQA3vRTqK
AG0UuKSgAooooAKKKTrQAtFFFABRRRQAUUlFABRRRQAUUUUAJiilopWAQikp1IRRYYlFFFIAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClyaSlzQAlFFFABRRRQAUUUUAFFFFABRRRQAUU
DrS9KAEoxS4paAG4owadRQAgFBFLRQA2jFLil7UANoo6ml6UAJRRRQAUUUUAFFFFADqKQUtNCCii
imAUUUUDENJTqTFIAFLRRQgFpRSUZpiHUUUUAFIcUZpKACiiigAoHWiigBcc0mDS5paAEwaMGjPN
BNACUUpFJQAUUo6UlABRRRQAUUUUAFBPpSZozQAtL2puaM0ALRmkooAXNKTTaQmlcB2aM03JozRc
Bd2aM02ii4xSaSiikAUUUUAFFFFABRRRQAUUUUAFFFKOaAEoxS4paAG4NLilop2AKQClpaLAJiil
ooEJRRQelDAM02iikMKKKKACiiigAopQOKSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKX
NJRTAdRSClpgLS5ptLmgQ6ikzS0AFIRS0UAFIRzS0UANopTSGgBKKKKAFopKWgBDRS0UAJRS0UAJ
RRRQAUUUUAFFFFABRRQaTAKbTu1NpDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KAP/2Q==

------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: https://blog.cong.moe/1006164_hu5c5f08ecb811926fc01848d227d7f912_248968_192x192_fill_q75_box_smart1.jpg

/9j/2wCEAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx
NDQ0Hyc5PTgyPC4zNDIBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAMAAwAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAA
AAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGh
CCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV
1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQAC
AQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXx
FxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqS
k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T1
9vf4+fr/2gAMAwEAAhEDEQA/AMbSr1Hso5nYyXMnARjwuKzdQBN60k8PMjEcHoPw9qzrORYkLb+C
O/Y0NLLcsdhIUnl/X6VnHDqMrohzbLMblbsx+aJFA6r0rRt7iWBvMjJA6dODWfEkcSqNm5eflBxW
3Z6xYR6ULaa3Pnx5CEc5yf8A69Z1ttFcqHmXbfVQ1vIsiFWYYBH3TUc12LyfTreRHdImLOByW9AB
+dNhFk0D+czghfkK9zVC0usXU9wuRhgsfYgDvWCppt6FOVkehQsEnQSF1LD5QzZB+ue9T3E8aReU
shG04CLXJ/8ACQzy26xrEok6Mx5H4DtUAuJpmwCWPXgcf/XrinQad3oS6h0Fw25yftGG7KPm/Olt
ZpbeIQzIeD8u45H144P4msy2lMsCk7Q38OOCatxSTMQqNggZ5PeqVBtWJ57FwSC6k8kuGc/xOuAD
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
3RDazKPvqTwT9D/OpinCWuqY21KJ/9k=

------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/html
Content-ID: <frame-571E8326E57CE1D5C5C80BECF492B501@mhtml.blink>
Content-Transfer-Encoding: quoted-printable
Content-Location: https://giscus.app/zh-CN/widget?origin=https%3A%2F%2Fblog.cong.moe%2Fpost%2F2021-03-16-grpc-on-typescript%2F&session=&theme=light&reactionsEnabled=1&emitMetadata=0&inputPosition=bottom&repo=zcong1993%2Fblog&repoId=MDEwOlJlcG9zaXRvcnkxMzk0MjQ3MTk%3D&category=Announcements&categoryId=DIC_kwDOCE9zz84CAYDY&strict=0&description=gRPC+%E6%98%AF%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%2C+%E6%94%AF%E6%8C%81%E5%A4%9A%E7%A7%8D%E8%AF%AD%E8%A8%80%E7%9A%84+RPC+%E6%A1%86%E6%9E%B6%2C+%E5%AE%98%E6%96%B9%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E4%BA%86+NodeJS+%E8%AF%AD%E8%A8%80.+%E8%80%8C+Typescript+%E4%BD%9C%E4%B8%BA+JavaScript+%E7%9A%84%E8%B6%85%E9%9B%86%2C+%E5%8F%AF%E4%BB%A5%E6%8F%90%E9%AB%98+js+%E4%BB%A3%E7%A0%81%E7%9A%84%E5%8F%AF%E7%BB%B4%E6%8A%A4%E6%80%A7%2C+%E5%B9%B6%E4%B8%94%E4%BB%A3%E7%A0%81%E6%8F%90%E7%A4%BA%E5%BE%88%E4%B8%8D%E9%94%99%2C+%E5%B7%B2%E5%9C%A8+js+%E5%B8%82%E5%9C%BA%E5%8D%A0%E6%8D%AE%E4%BA%86%E5%BE%88%E5%A4%A7%E4%BB%BD%E9%A2%9D.+%E6%9C%AC%E6%96%87%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D%E4%B8%8B+gRPC+%E5%9C%A8+Typescript+%E4%B8%AD%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8.&backLink=https%3A%2F%2Fblog.cong.moe%2Fpost%2F2021-03-16-grpc-on-typescript%2F&term=post%2F2021-03-16-grpc-on-typescript%2F

<!DOCTYPE html><html dir=3D"ltr" lang=3D"zh-CN"><head><meta http-equiv=3D"C=
ontent-Type" content=3D"text/html; charset=3DUTF-8"><link rel=3D"stylesheet=
" type=3D"text/css" href=3D"cid:css-db567f2a-2bca-425a-a842-57bb558f1953@mh=
tml.blink" /><meta name=3D"viewport" content=3D"width=3Ddevice-width"><base=
 target=3D"_top"><title>giscus</title><meta name=3D"next-head-count" conten=
t=3D"4"><meta name=3D"twitter:card" content=3D"summary_large_image"><meta n=
ame=3D"twitter:site" content=3D"@laymonage"><link rel=3D"icon" href=3D"http=
s://giscus.app/favicon.ico"><link rel=3D"preconnect" href=3D"https://api.gi=
thub.com/"><link rel=3D"preconnect" href=3D"https://avatars3.githubusercont=
ent.com/"><link rel=3D"apple-touch-icon" sizes=3D"180x180" href=3D"https://=
giscus.app/apple-touch-icon.png"><link rel=3D"icon" type=3D"image/png" size=
s=3D"32x32" href=3D"https://giscus.app/favicon-32x32.png"><link rel=3D"icon=
" type=3D"image/png" sizes=3D"16x16" href=3D"https://giscus.app/favicon-16x=
16.png"><meta name=3D"description" content=3D"A comments widget built on Gi=
tHub Discussions."><meta property=3D"og:description" content=3D"A comments =
widget built on GitHub Discussions."><meta property=3D"og:title" content=3D=
"giscus"><meta property=3D"og:image" content=3D"https://opengraph.githubass=
ets.com/4f866d5b634e7cd5422af77f8dbfb6d48dd288b7c5c18326544c1973210320ed/gi=
scus/giscus"><meta name=3D"twitter:title" content=3D"giscus"><meta name=3D"=
twitter:description" content=3D"A comments widget built on GitHub Discussio=
ns."><meta name=3D"twitter:image" content=3D"https://opengraph.githubassets=
.com/4f866d5b634e7cd5422af77f8dbfb6d48dd288b7c5c18326544c1973210320ed/giscu=
s/giscus"><meta name=3D"color-scheme" content=3D"light dark"><link rel=3D"m=
anifest" href=3D"https://giscus.app/site.webmanifest"><link rel=3D"preload"=
 href=3D"https://giscus.app/_next/static/css/701a2a06716cae42.css" as=3D"st=
yle"><link rel=3D"stylesheet" href=3D"https://giscus.app/_next/static/css/7=
01a2a06716cae42.css" data-n-g=3D""><link id=3D"giscus-theme" rel=3D"stylesh=
eet" crossorigin=3D"anonymous" href=3D"https://giscus.app/themes/light.css"=
></head><body><div id=3D"__next"><main data-theme=3D"light" class=3D"w-full=
 mx-auto"><div class=3D"color-text-primary gsc-main"><div class=3D"gsc-reac=
tions"><h4 class=3D"gsc-reactions-count">0 =E4=B8=AA=E8=A1=A8=E6=83=85</h4>=
<div class=3D"flex flex-auto items-center justify-center gap-2 text-sm mt-2=
"><details class=3D"gsc-reactions-menu"><summary aria-label=3D"=E6=B7=BB=E5=
=8A=A0=E5=9B=9E=E5=BA=94" class=3D"link-secondary gsc-reactions-button gsc-=
social-reaction-summary-item "><svg aria-hidden=3D"true" focusable=3D"false=
" viewBox=3D"0 0 16 16" width=3D"16" height=3D"16" fill=3D"currentColor" cl=
ass=3D"octicon octicon-smiley" style=3D"display: inline-block; user-select:=
 none; vertical-align: text-bottom; overflow: visible;"><path d=3D"M8 0a8 8=
 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm3.8=
2 1.636a.75.75 0 0 1 1.038.175l.007.009c.103.118.22.222.35.31.264.178.683.3=
7 1.285.37.602 0 1.02-.192 1.285-.371.13-.088.247-.192.35-.31l.007-.008a.75=
.75 0 0 1 1.222.87l-.022-.015c.02.013.021.015.021.015v.001l-.001.002-.002.0=
03-.005.007-.014.019a2.066 2.066 0 0 1-.184.213c-.16.166-.338.316-.53.445-.=
63.418-1.37.638-2.127.629-.946 0-1.652-.308-2.126-.63a3.331 3.331 0 0 1-.71=
5-.657l-.014-.02-.005-.006-.002-.003v-.002h-.001l.613-.432-.614.43a.75.75 0=
 0 1 .183-1.044ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM5 8a1 1 0 1 1 0-2 1 1 0 =
0 1 0 2Zm5.25 2.25.592.416a97.71 97.71 0 0 0-.592-.416Z"></path></svg></sum=
mary><div class=3D"color-border-primary color-text-secondary color-bg-overl=
ay gsc-reactions-popover bottom  left"><p class=3D"m-2"><a href=3D"https://=
giscus.app/api/oauth/authorize?redirect_uri=3Dhttps%3A%2F%2Fblog.cong.moe%2=
Fpost%2F2021-03-16-grpc-on-typescript%2F" target=3D"_top" class=3D"color-te=
xt-link">=E7=99=BB=E5=BD=95</a>=E5=90=8E=E5=8F=AF=E6=B7=BB=E5=8A=A0=E5=9B=
=9E=E5=BA=94=E3=80=82</p><div class=3D"color-border-primary my-2 border-t">=
</div><div class=3D"m-2"><button aria-label=3D"=E8=A1=A8=E7=A4=BA +1" type=
=3D"button" disabled=3D"" class=3D"gsc-emoji-button no-token"><span class=
=3D"gsc-emoji">=F0=9F=91=8D</span></button><button aria-label=3D"=E8=A1=A8=
=E7=A4=BA -1" type=3D"button" disabled=3D"" class=3D"gsc-emoji-button no-to=
ken"><span class=3D"gsc-emoji">=F0=9F=91=8E</span></button><button aria-lab=
el=3D"=E8=A1=A8=E7=A4=BA =E5=A4=A7=E7=AC=91" type=3D"button" disabled=3D"" =
class=3D"gsc-emoji-button no-token"><span class=3D"gsc-emoji">=F0=9F=98=84<=
/span></button><button aria-label=3D"=E8=A1=A8=E7=A4=BA =E5=A5=BD=E8=80=B6"=
 type=3D"button" disabled=3D"" class=3D"gsc-emoji-button no-token"><span cl=
ass=3D"gsc-emoji">=F0=9F=8E=89</span></button><button aria-label=3D"=E8=A1=
=A8=E7=A4=BA =E5=9B=B0=E6=83=91" type=3D"button" disabled=3D"" class=3D"gsc=
-emoji-button no-token"><span class=3D"gsc-emoji">=F0=9F=98=95</span></butt=
on><button aria-label=3D"=E8=A1=A8=E7=A4=BA =E7=88=B1=E4=BA=86" type=3D"but=
ton" disabled=3D"" class=3D"gsc-emoji-button no-token"><span class=3D"gsc-e=
moji">=E2=9D=A4=EF=B8=8F</span></button><button aria-label=3D"=E8=A1=A8=E7=
=A4=BA =E5=A4=AA=E5=BF=AB=E5=95=A6" type=3D"button" disabled=3D"" class=3D"=
gsc-emoji-button no-token"><span class=3D"gsc-emoji">=F0=9F=9A=80</span></b=
utton><button aria-label=3D"=E8=A1=A8=E7=A4=BA =E5=9B=B4=E8=A7=82" type=3D"=
button" disabled=3D"" class=3D"gsc-emoji-button no-token"><span class=3D"gs=
c-emoji">=F0=9F=91=80</span></button></div></div></details><div class=3D"gs=
c-direct-reaction-buttons"></div></div></div><div class=3D"gsc-comments"><d=
iv class=3D"gsc-header"><div class=3D"gsc-left-header"><h4 class=3D"gsc-com=
ments-count">0 =E6=9D=A1=E8=AF=84=E8=AE=BA</h4></div></div><div class=3D"gs=
c-timeline hidden"></div><form class=3D"color-bg-primary color-border-prima=
ry gsc-comment-box  "><div class=3D"color-bg-tertiary color-border-primary =
gsc-comment-box-tabs"><div class=3D"mx-2 mb-[-1px] mt-2"><button type=3D"bu=
tton" class=3D"rounded-t border border-b-0 px-4 py-2 color-text-primary col=
or-bg-canvas color-border-primary">=E8=BE=93=E5=85=A5</button><button type=
=3D"button" class=3D"ml-1 rounded-t border border-b-0 px-4 py-2 color-text-=
secondary border-transparent">=E9=A2=84=E8=A7=88</button></div><div class=
=3D"gsc-comment-box-md-toolbar"><button type=3D"button" title=3D"=E5=90=AF=
=E7=94=A8=E7=BC=96=E8=BE=91=E5=99=A8=E5=9B=BA=E5=AE=9A=E5=AE=BD=E5=BA=A6=EF=
=BC=88=E7=AD=89=E5=AE=BD=EF=BC=89=E5=AD=97=E4=BD=93" tabindex=3D"-1" class=
=3D"gsc-toolbar-item"><svg aria-hidden=3D"true" focusable=3D"false" viewBox=
=3D"0 0 16 16" width=3D"16" height=3D"16" fill=3D"currentColor" class=3D"oc=
ticon octicon-typography" style=3D"display: inline-block; user-select: none=
; vertical-align: text-bottom; overflow: visible;"><path d=3D"M6.71 10H2.33=
2l-.874 2.498a.75.75 0 0 1-1.415-.496l3.39-9.688a1.217 1.217 0 0 1 2.302.01=
8l3.227 9.681a.75.75 0 0 1-1.423.474Zm3.13-4.358C10.53 4.374 11.87 4 13 4c1=
.5 0 3 .939 3 2.601v5.649a.75.75 0 0 1-1.448.275C13.995 12.82 13.3 13 12.5 =
13c-.77 0-1.514-.231-2.078-.709-.577-.488-.922-1.199-.922-2.041 0-.694.265-=
1.411.887-1.944C11 7.78 11.88 7.5 13 7.5h1.5v-.899c0-.54-.5-1.101-1.5-1.101=
-.869 0-1.528.282-1.84.858a.75.75 0 1 1-1.32-.716ZM6.21 8.5 4.574 3.594 2.8=
57 8.5Zm8.29.5H13c-.881 0-1.375.22-1.637.444-.253.217-.363.5-.363.806 0 .40=
8.155.697.39.896.249.21.63.354 1.11.354.732 0 1.26-.209 1.588-.449.35-.257.=
412-.495.412-.551Z"></path></svg></button></div></div><div class=3D"gsc-com=
ment-box-main"><div class=3D"gsc-comment-box-write"><textarea placeholder=
=3D"=E7=99=BB=E5=BD=95=E5=90=8E=E5=8F=AF=E5=8F=91=E8=A1=A8=E8=AF=84=E8=AE=
=BA" disabled=3D"" class=3D"form-control input-contrast gsc-comment-box-tex=
tarea "></textarea><div class=3D"form-control input-contrast gsc-comment-bo=
x-textarea-extras"><a rel=3D"nofollow noopener noreferrer" target=3D"_blank=
" href=3D"https://guides.github.com/features/mastering-markdown/" title=3D"=
=E6=94=AF=E6=8C=81=E4=BD=BF=E7=94=A8 Markdown =E8=AF=AD=E6=B3=95" class=3D"=
link-secondary gsc-comment-box-markdown-hint flex gap-2"><svg aria-hidden=
=3D"true" focusable=3D"false" viewBox=3D"0 0 16 16" width=3D"16" height=3D"=
16" fill=3D"currentColor" class=3D"mr-1" style=3D"display: inline-block; us=
er-select: none; vertical-align: text-bottom; overflow: visible;"><path d=
=3D"M14.85 3c.63 0 1.15.52 1.14 1.15v7.7c0 .63-.51 1.15-1.15 1.15H1.15C.52 =
13 0 12.48 0 11.84V4.15C0 3.52.52 3 1.15 3ZM9 11V5H7L5.5 7 4 5H2v6h2V8l1.5 =
1.92L7 8v3Zm2.99.5L14.5 8H13V5h-2v3H9.5Z"></path></svg></a></div></div></di=
v><div class=3D"gsc-comment-box-bottom"><div class=3D"gsc-comment-box-butto=
ns"><a target=3D"_top" href=3D"https://giscus.app/api/oauth/authorize?redir=
ect_uri=3Dhttps%3A%2F%2Fblog.cong.moe%2Fpost%2F2021-03-16-grpc-on-typescrip=
t%2F" class=3D"btn btn-primary inline-flex items-center ml-1 rounded-md bor=
der hover:no-underline"><svg aria-hidden=3D"true" focusable=3D"false" viewB=
ox=3D"0 0 16 16" width=3D"16" height=3D"16" fill=3D"currentColor" class=3D"=
mr-2" style=3D"display: inline-block; user-select: none; vertical-align: te=
xt-bottom; overflow: visible;"><path d=3D"M8 0c4.42 0 8 3.58 8 8a8.013 8.01=
3 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.2=
3-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02=
-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.5=
3-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0=
 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15=
-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2=
.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.4=
2 3.58-8 8-8Z"></path></svg> =E4=BD=BF=E7=94=A8 GitHub =E7=99=BB=E5=BD=95</=
a></div></div></form></div></div></main></div><div class=3D"xl-chrome-ext-b=
ar_4DB361DE-01F7-4376-B494-639E489D19ED" id=3D"xl_chrome_ext_4DB361DE-01F7-=
4376-B494-639E489D19ED" data-v-app=3D"" style=3D"display: block;"><div clas=
s=3D""><!----><div class=3D"_options-wrapper_1h5qu_1" style=3D"display: non=
e;"><a id=3D"xl_chrome_ext_bar_close"></a><div class=3D"_xl-chrome-ext-bar_=
_logo_1h5qu_28"></div><!----><div class=3D"_xl-chrome-ext-tips_1h5qu_60"><a=
 id=3D"xl_chrome_ext_bar_download" class=3D"_xl-chrome-ext-bar__option_1h5q=
u_76"></a><div class=3D"_xl-chrome-ext-title_1h5qu_67">=E4=B8=8B=E8=BD=BD=
=E8=A7=86=E9=A2=91</div></div><div class=3D"_xl-chrome-ext-tips_1h5qu_60"><=
a id=3D"xl_chrome_ext_bar_screen" class=3D"_xl-chrome-ext-bar__option_1h5qu=
_76"></a><div class=3D"_xl-chrome-ext-title_1h5qu_67">=E6=8A=95=E5=B1=8F</d=
iv></div><div class=3D"_xl-chrome-ext-tips_1h5qu_60"><a id=3D"xl_chrome_ext=
_bar_copy" class=3D"_xl-chrome-ext-bar__option_1h5qu_76"></a><div class=3D"=
_xl-chrome-ext-title_1h5qu_67">=E5=A4=8D=E5=88=B6=E9=93=BE=E6=8E=A5</div></=
div></div><!----><!----><!----><!----></div></div><next-route-announcer><p =
aria-live=3D"assertive" id=3D"__next-route-announcer__" role=3D"alert" styl=
e=3D"border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px=
; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-spa=
ce: nowrap; overflow-wrap: normal;"></p></next-route-announcer></body></htm=
l>
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: cid:css-db567f2a-2bca-425a-a842-57bb558f1953@mhtml.blink

@charset "utf-8";

.gwd-row[data-v-782a8437] { display: flex; flex-direction: row; }

.gwd-inline-row[data-v-782a8437] { display: inline-flex; flex-direction: ro=
w; }

.gwd-column[data-v-782a8437] { display: flex; flex-direction: column; }

.gwd-inline-column[data-v-782a8437] { display: inline-flex; flex-direction:=
 column; }

.gwd-align[data-v-782a8437] { align-content: center; align-items: center; }

.gwd-jcc[data-v-782a8437] { justify-content: center; }

.gwd-jic[data-v-782a8437] { justify-items: center; }

.gwd-button[data-v-782a8437] { outline: none; border: none; }

.bjg-bar-button[data-v-782a8437] { font-size: 0px; }

.bjg-bar-button[data-v-782a8437]:hover { background: rgb(255, 251, 239); cu=
rsor: pointer; }

.bjg-bar-button:hover .bjg-window[data-v-782a8437] { display: block; }

.mainbar-fold .bjg-bar-button[data-v-782a8437], .mainbar-fold #top_coupon_b=
tn[data-v-782a8437], .mainbar-fold .rinfo-btn[data-v-782a8437], .mainbar-fo=
ld .gwd-bottom-tmall[data-v-782a8437] { display: none !important; }

.gwd-font12[data-v-782a8437] { font-size: 12px; }

.gwd-font14[data-v-782a8437] { font-size: 14px; }

.gwd-red[data-v-782a8437] { color: rgb(255, 53, 50); }

.gwd-red-bg[data-v-782a8437] { background: rgb(255, 53, 50); }

.gwd-hui333[data-v-782a8437] { color: rgb(51, 51, 51); }

.gwd-hui999[data-v-782a8437] { color: rgb(153, 153, 153); }

.gwd-font10[data-v-782a8437] { font-size: 12px; transform: scale(0.8333); t=
ransform-origin: center bottom; }

.gwd-font11[data-v-782a8437] { font-size: 12px; transform: scale(0.91666); =
transform-origin: center bottom; }

.gwd-font9[data-v-782a8437] { font-size: 12px; transform: scale(0.75); tran=
sform-origin: center bottom; }

.gwd-hoverable[data-v-782a8437]:hover { background: rgb(237, 241, 242); }

.right-info > [data-v-782a8437] { border-left: 1px solid rgb(237, 241, 242)=
; }

.gwd-red-after-visit[data-v-782a8437]:hover { color: rgb(224, 48, 36) !impo=
rtant; }

.gwd-button[data-v-782a8437]:hover { filter: brightness(1.1); }

.gwd-button[data-v-782a8437] { padding-top: 1px; padding-bottom: 1px; }

.gwd-button[data-v-782a8437]:active { filter: brightness(0.9); }

.gwd-fadeout-5s[data-v-782a8437] { opacity: 0; transition: opacity 5s; }

.gwd-scrollbar[data-v-782a8437]::-webkit-scrollbar { width: 6px; border-rad=
ius: 17px; }

.gwd-scrollbar[data-v-782a8437]::-webkit-scrollbar-thumb { border-radius: 1=
7px; background: rgb(153, 153, 153); }

#gwdang_main[data-v-782a8437], .gwdang-main[data-v-782a8437], .bjgext-detai=
l[data-v-782a8437] { font-size: 12px; }

#gwdang_main button[data-v-782a8437], .gwdang-main button[data-v-782a8437],=
 .bjgext-detail button[data-v-782a8437] { text-align: center; }

.gwd-width-100[data-v-782a8437] { width: 100%; }

.gwd-overlay[data-v-782a8437] { font-family: "Microsoft YaHei", Arial, SimS=
un, serif; font-size: 0px; position: fixed; inset: 0px; background: rgba(0,=
 0, 0, 0.35); z-index: 999999999; }

.gwd-taobao[data-v-782a8437] { margin-top: 20px; }

.gwd-taobao span[data-v-782a8437] { color: rgb(255, 68, 0); }

.gwd-jd[data-v-782a8437] { margin-top: 20px; }

.gwd-jd span[data-v-782a8437] { color: rgb(226, 35, 26); }

a[data-v-782a8437] { white-space: nowrap; position: relative; height: 24px;=
 font-family: "Microsoft YaHei"; }

a[data-v-782a8437]:hover { text-decoration: none; cursor: pointer; }

a:hover .gwd-tooltip[data-v-782a8437] { display: block; }

.gwd-coupon[data-v-782a8437] { height: 24px; box-sizing: border-box; min-wi=
dth: 106px; }

.gwd-coupon[data-v-782a8437] { background-size: contain; padding-left: 8px;=
 padding-right: 8px; }

.gwd-coupon[data-v-782a8437]::before, .gwd-coupon[data-v-782a8437]::after {=
 content: ""; position: absolute; top: 0px; bottom: 0px; width: 9px; backgr=
ound-size: contain; }

.gwd-coupon[data-v-782a8437]::before { left: 0px; }

.gwd-coupon[data-v-782a8437]::after { right: 0px; transform: rotate(180deg)=
; }

.gwd-coupon.gwd-taobao[data-v-782a8437] { background-image: url("data:image=
/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAA0CAYAAAAjfRLqAAAAAXNSR0IArs4c6QA=
AAU5JREFUeF7tlNENgDAQhdrd3H+lc4cmGgX8r5YHca+eFgAtsOdaA+IJRb5AQcsDoOHvmekPTb=
Mq5ilosXwiekETrYqZClosn4he0ESrYqaCFssnohc00aqYqaDF8onoBU20KmYqaLF8InpBE62Km=
QpaLJ+IXtBEq2KmghbLJ6IXNNGqmKmgxfKJ6AVNtCpmKmixfCJ6QROtipkKWiyfiF7QRKtipoIW=
yyeiFzTRqpipoMXyiegFTbQqZiposXwiekETrYqZClosn4he0ESrYqaCFssnohc00aqYqaDF8on=
oBU20KmYqaLF8InpBE62KmQpaLJ+IXtBEq2KmghbLJ6IXNNGqmKmgxfKJ6AVNtCpmKmixfCJ6QR=
OtipkKWiyfiF7QRKtipoL+m/yZv9341fvuuVYLvTp5H3tygYJ+ct3zd/eTOdxuH57rWAt8coEbb=
yjDgopRg1YAAAAASUVORK5CYII=3D"); }

.gwd-coupon.gwd-taobao[data-v-782a8437]::before, .gwd-coupon.gwd-taobao[dat=
a-v-782a8437]::after { background-repeat: no-repeat; background-image: url(=
"
R0IArs4c6QAAAZJJREFUSEvtlz9OAkEUh79NsNJiOy038QDuEUggxM6INWCrDRRSwwE0UtqtiR7=
A3mKPwBH2CF7AZM2bAeJkIeyb3U004TU0w5f3Z37vNxtQUwTCybvkVXkNgT79E3MzumjDQwJnkb=
rSYmknITymcB6rYAZkGt4m4og5OSMkM4EpYgNawUJaZEDIewan5Ut0QKurIKm0TUaSWcnYBloCc=
SVQ3mFMwMKUJKUpwk6tQ0KANMTWMn2F3kiBAXf8xyEMZ9CfqCBy2AV9fIHAPMIF1SYR5ch/J16U=
iPTn7lld3Bok0ogIuDK3ejiHwUwFcyXSNeNPEeG+ZZjfkrH7Zr8sVRugGa3ll0R8I1rzU7/ZRS0=
jERlXTO8WpknJ7thjxfGLYJ9S1S4qgmTkNxMvmTQkkdq0drCjbResGYmsfO0v2pFsSKWTFLUmdj=
SYqwT7H+xI9rTHa237PqrJjuzL4X4B12NVww92tL9d9maLHYmXtRAPir2fx85HTS121B9bsSre1=
+uiG7Kj/T3deaLe77UKiWz++gOA98aFVwFZGwAAAABJRU5ErkJggg=3D=3D"); }

.gwd-coupon.gwd-taobao[data-v-782a8437]:hover { background-image: url("data=
:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAA0CAYAAAAjfRLqAAAAAXNSR0IAr=
s4c6QAAAVNJREFUeF7tlMENgzAUxZLd2H+NXrvB7w6RQMU290D8bLFXTwuAFthzrQHxhCJfoKDl=
AdDw93w//aFpVsU8BS2WT0QvaKJVMVNBi+UT0QuaaFXMVNBi+UT0giZaFTMVtFg+Eb2giVbFTAU=
tlk9EL2iiVTFTQYvlE9ELmmhVzFTQYvlE9IImWhUzFbRYPhG9oIlWxUwFLZZPRC9oolUxU0GL5R=
PRC5poVcxU0GL5RPSCJloVMxW0WD4RvaCJVsVMBS2WT0QvaKJVMVNBi+UT0QuaaFXMVNBi+UT0g=
iZaFTMVtFg+Eb2giVbFTAUtlk9EL2iiVTFTQYvlE9ELmmhVzFTQYvlE9IImWhUzFbRYPhG9oIlW=
xUwFLZZPRC9oolUxU0GL5RPRC5poVcxU0G+TP/O2Gz963z3XaqFHJ+9jdy5Q0Heue/7ufjKH2+3=
Dcx1rgb9c4AdcEryACPINxAAAAABJRU5ErkJggg=3D=3D"); }

.gwd-coupon.gwd-taobao[data-v-782a8437]:hover::before, .gwd-coupon.gwd-taob=
ao[data-v-782a8437]:hover::after { background-image: url("data:image/png;ba=
se64,iVBORw0KGgoAAAANSUhEUgAAABIAAAA0CAYAAACHO2h8AAAAAXNSR0IArs4c6QAAAYtJRE=
FUSEvtl79Kw2AUxX+BuCiULroVstfBVadIOwgd3NqxOOii4GAfwDoLdqpjcVdfwKF7HZydHH0JI=
XJvk+pHWujNH6nQC9mSk/Pde849iUdB5QlO1CTKi1cS0ONnZmIuo/oBnA9gp2YGTB9tqwL9Jwh2=
TWAKpA0PCdjgmoguwkzADDUDisGq+HwAVYYT0xEdoFgKYyBURsJsyZoH9Abs5QKKGlziMWC7Bve=
TJblMb5tOrcEIj0CPJCUSOOxkAEosslmBTg9apyaQH0YJ0MM7iI4ylCvIwixiHPlv4mmLSH9Obs=
yHS4DEGgEex6rq9hW0eyYw1yJNHf9YGz58NTV+sbJvX0wboByvRUcEfCFey+Z+3UW+WuRODRt24=
GJgb7aTImJY0ZNx3bo6krG3zkzTSmiXZJHCvLaOo3kCK8cica6tYhzJhjQmSXrVZtiO/yGOjJ8y=
fxJHXX1L1qklFKN1HC10v8aRZJnPSOOovg/951WIIzGqXMZMS3utsBQxdcW9udj/tRxEZo9+AyV=
qv4MZSS3ZAAAAAElFTkSuQmCC"); }

.gwd-coupon.gwd-jd[data-v-782a8437] { background-image: url("
JREFUeF7tnbERgFAMhcz+2+k0VnGF33kcWFvwAmfrXD1dAHCBee9nAZwhyi9QqPIAKPNnd/uiUm=
yJOQtVLJ80vVBJtsSshSqWT5peqCRbYtZCFcsnTS9Uki0xa6GK5ZOmFyrJlpi1UMXySdMLlWRLz=
FqoYvmk6YVKsiVmLVSxfNL0QiXZErMWqlg+aXqhkmyJWQtVLJ80vVBJtsSshSqWT5peqCRbYtZC=
FcsnTS9Uki0xa6GK5ZOmFyrJlpi1UMXySdMLlWRLzFqoYvmk6YVKsiVmLVSxfNL0QiXZErMWqlg=
+aXqhkmyJWQtVLJ80vVBJtsSshSqWT5peqCRbYtZCFcsnTe/3PSRbYtZC/V9+v086cDAH7/RKF/=
j9Ah900KcI8oZhhwAAAABJRU5ErkJggg=3D=3D"); }

.gwd-coupon.gwd-jd[data-v-782a8437]::before, .gwd-coupon.gwd-jd[data-v-782a=
8437]::after { background-image: url("
NSUhEUgAAABIAAAAsCAYAAABovuiKAAAAAXNSR0IArs4c6QAAAdVJREFUSEvNVlFO20AQfbOzay=
EhUUepgkIicFBKCmoljpAb0CNwA7gBuUG4AUfhCCvb6jdH4DPFldhqXCWya/Exi5G6n5b9/ObNm=
zdL6OmQ4LwUZXgv3scAudMZaH8/ilyHEX8egsdjNVgNtMnzFUCZAa5AlPJoBD4cqcBqoO3Z+HJp=
GI+UOLjFIh6o2cHk+7d4oMr7y8DWwzkkXyMYbYrimog+UcAKQCr6iE6a0+matF9soD0tIHs6g+n=
DR1qBm6xbjMwgrbWhJNFWhq5GiYOdzdRgO0NuvM+Y7UMAljGCt5wdvE8rts9gRnJxriqvBdSbs3=
+XP+9ew+squrSqKB8DKANCJqz45Bh8cKAvbRe1xoAnR+A0VYHIy63292ZItzhT+2dLvRu1Eem4K=
60qigeJWjGjPLTTCcxgoNKp5aNfeX5LZNbR7W/+ettBrfD/hL/PDNun6BGRgQWQsXXrEMKlxImd=
TvUatXa/c3XUajOp1X4JfTMcgphVbD7O2TH+edPZsq7tfK4u7+8lQnY+QgqDNYiyd18idiv7v4n=
aKi9vAuGe9vbgvsxVFqg1kukPIInFH3XUTifgmOlvOjvmJtIxpLs4V7f9TR+phGm83O89O5ZF87=
s/IaG3Cf8Fdl8AAAAASUVORK5CYII=3D"); background-size: cover; background-repe=
at: no-repeat; }

.gwd-coupon.gwd-jd[data-v-782a8437]:hover { background-image: url("data:ima=
ge/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAAAsCAYAAAD1nyNHAAAAAXNSR0IArs4c6=
QAAAR9JREFUeF7tnbENgFAQhbz9t9NdTGzUFX73Q8DagncQW+fo6QKAC8xzXh+AM0T5BQpVHgBl=
/rz33ReVYkvMWahi+aTphUqyJWYtVLF80vRCJdkSsxaqWD5peqGSbIlZC1UsnzS9UEm2xKyFKpZ=
Pml6oJFti1kIVyydNL1SSLTFroYrlk6YXKsmWmLVQxfJJ0wuVZEvMWqhi+aTphUqyJWYtVLF80v=
RCJdkSsxaqWD5peqGSbIlZC1UsnzS9UEm2xKyFKpZPml6oJFti1kIVyydNL1SSLTFroYrlk6YXK=
smWmLVQxfJJ0wuVZEvMWqhi+aTphUqyJWYtVLF80vRCJdkSsxaqWD5per/vIdkSsxbqfvn9PmnB=
wSy80ytdYPsFfqOApDYolPr+AAAAAElFTkSuQmCC"); }

.gwd-coupon.gwd-jd[data-v-782a8437]:hover::before, .gwd-coupon.gwd-jd[data-=
v-782a8437]:hover::after { background-image: url("
ORw0KGgoAAAANSUhEUgAAABIAAAAsCAYAAABovuiKAAAAAXNSR0IArs4c6QAAAclJREFUSEvNlt=
tNw0AQRe/MrgURChgThUeAmEcBKSEdQAl0AB2QDkIHlEIJlm3xTQl8BoyURePIkY3Fx6yDxPxFc=
q5m75x5EDYUJDqfWe666v2NkBmdgHs9r+RaGXEYwgwO1GKl0CJNZwDFDNyAKORoHyaKVGKlUBWL=
JJ+ywQtZCxuP/YXqFQyur/yFiiSZOGMTWIvAJ6NFlt0R0R45zAD4e1QHknrbsKOR6lnycaP8dnQ=
C2gRHWoPraTcy4n4fwhAFQbenlW+1FtIqWrE1kIskiY2xzw6Yik/ilyYaZLskCQtj38GM4PJCo7=
OqWj0qFLTGN4S+8tfHpVvOfFgqhYosf3GgGHCx/DbHR+CdHf3T1mQzwwwG4N2+SqRFttaXX4G04=
3M1P5VYe9RGEUy07/e0IsueZdQKjKXZw6Hap0b5P9L0gYjnncne2KiVfmNj37xbRAQAxMYGc+fc=
RMaJORyqDG+vbFlFvmOkIlvKTmEIYlZl83dk+/DzK9nluj4/g1ROE6sjQnY+XAjGHERx5yNivbL=
/zagt0vzeEZ5oawv27FRj0Wr4S/c7UAjgtlP3148IH6PbR8TlhRfVLSGVKT8+3uyd3SWT6r/fRd=
q0N2b1Td4AAAAASUVORK5CYII=3D"); }

.gwd-redpack[data-v-782a8437] { padding-right: 5px; padding-left: 8px; back=
ground: white; }

.gwd-redpack.gwd-taobao[data-v-782a8437] { border: 1px solid rgb(255, 68, 0=
); }

.gwd-redpack.gwd-taobao[data-v-782a8437]:hover { background: rgb(255, 240, =
231); }

.gwd-redpack.gwd-jd[data-v-782a8437] { border: 1px solid rgb(249, 210, 211)=
; }

.gwd-redpack.gwd-jd[data-v-782a8437]:hover { background: rgb(255, 240, 231)=
; }

.gwd-tooltip[data-v-782a8437] { position: absolute; top: -30px; left: 50%; =
transform: translateX(-50%); width: 60px; height: 22px; line-height: 22px; =
text-align: center; z-index: 1; color: rgb(60, 60, 60); box-shadow: rgba(0,=
 0, 0, 0.15) 0px 2px 8px; display: none; background: white; border-radius: =
2px; }

.gwd-tooltip span[data-v-782a8437] { color: rgb(60, 60, 60); }

.gwd-tooltip[data-v-782a8437]::after { content: " "; position: absolute; bo=
ttom: -10px; left: 50%; margin-left: -5px; border-width: 5px; border-style:=
 solid; border-color: transparent transparent white; transform: rotate(180d=
eg); }
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: https://giscus.app/_next/static/css/701a2a06716cae42.css

@charset "utf-8";

*, ::after, ::before { border: 0px solid rgb(229, 231, 235); box-sizing: bo=
rder-box; }

::after, ::before { --tw-content: ""; }

:host, html { line-height: 1.5; text-size-adjust: 100%; font-family: -apple=
-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "App=
le Color Emoji", "Segoe UI Emoji"; font-feature-settings: normal; font-vari=
ation-settings: normal; tab-size: 4; -webkit-tap-highlight-color: transpare=
nt; }

body { line-height: inherit; margin: 0px; }

hr { border-top-width: 1px; color: inherit; height: 0px; }

abbr:where([title]) { text-decoration: underline dotted; }

h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; }

a { color: inherit; text-decoration: inherit; }

b, strong { font-weight: bolder; }

code, kbd, pre, samp { font-family: ui-monospace, SFMono-Regular, Menlo, Mo=
naco, Consolas, "Liberation Mono", "Courier New", monospace; font-feature-s=
ettings: normal; font-size: 1em; font-variation-settings: normal; }

small { font-size: 80%; }

sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-ali=
gn: initial; }

sub { bottom: -0.25em; }

sup { top: -0.5em; }

table { border-collapse: collapse; border-color: inherit; text-indent: 0px;=
 }

button, input, optgroup, select, textarea { color: inherit; font-family: in=
herit; font-feature-settings: inherit; font-size: 100%; font-variation-sett=
ings: inherit; font-weight: inherit; letter-spacing: inherit; line-height: =
inherit; margin: 0px; padding: 0px; }

button, select { text-transform: none; }

button, input:where([type=3D"button"]), input:where([type=3D"reset"]), inpu=
t:where([type=3D"submit"]) { appearance: button; background-color: initial;=
 background-image: none; }

progress { vertical-align: initial; }

::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; }

[type=3D"search"] { appearance: textfield; outline-offset: -2px; }

::-webkit-search-decoration { appearance: none; }

::-webkit-file-upload-button { appearance: button; font: inherit; }

summary { display: list-item; }

blockquote, dd, dl, fieldset, figure, h1, h2, h3, h4, h5, h6, hr, p, pre { =
margin: 0px; }

fieldset, legend { padding: 0px; }

menu, ol, ul { list-style: none; margin: 0px; padding: 0px; }

dialog { padding: 0px; }

textarea { resize: vertical; }

input::placeholder, textarea::placeholder { color: rgb(156, 163, 175); opac=
ity: 1; }

[role=3D"button"], button { cursor: pointer; }

:disabled { cursor: default; }

audio, canvas, embed, iframe, img, object, svg, video { display: block; ver=
tical-align: middle; }

img, video { height: auto; max-width: 100%; }

[hidden] { display: none; }

*, ::backdrop, ::after, ::before { --tw-border-spacing-x: 0; --tw-border-sp=
acing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-=
skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; =
--tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --=
tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to=
-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --=
tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring=
-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: #3b82f68=
0; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-sh=
adow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightne=
ss: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; =
--tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --=
tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale=
: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opaci=
ty: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ;=
 --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; }

#__next .sr-only { height: 1px; margin: -1px; overflow: hidden; padding: 0p=
x; position: absolute; width: 1px; clip: rect(0px, 0px, 0px, 0px); border-w=
idth: 0px; white-space: nowrap; }

#__next .relative { position: relative; }

#__next .block { display: block; }

#__next .inline-block { display: inline-block; }

#__next .flex { display: flex; }

#__next .inline-flex { display: inline-flex; }

#__next .contents { display: contents; }

#__next .\!hidden { display: none !important; }

#__next .hidden { display: none; }

#__next .h-8 { height: 2rem; }

#__next .min-h-screen { min-height: 100vh; }

#__next .w-\[29px\] { width: 29px; }

#__next .w-full { width: 100%; }

#__next .w-max { width: max-content; }

#__next .min-w-0 { min-width: 0px; }

#__next .min-w-\[200px\] { min-width: 200px; }

#__next .min-w-\[75\%\] { min-width: 75%; }

#__next .max-w-3xl { max-width: 48rem; }

#__next .flex-auto { flex: 1 1 auto; }

#__next .shrink-0 { flex-shrink: 0; }

#__next .rotate-90 { --tw-rotate: 90deg; transform: translate(var(--tw-tran=
slate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-ske=
w-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-sca=
le-y)); }

@keyframes spin {=20
  100% { transform: rotate(1turn); }
}

#__next .animate-spin { animation: 1s linear 0s infinite normal none runnin=
g spin; }

#__next .cursor-not-allowed { cursor: not-allowed; }

#__next .cursor-pointer { cursor: pointer; }

#__next .cursor-text { cursor: text; }

#__next .resize { resize: both; }

#__next .appearance-none { appearance: none; }

#__next .content-center { align-content: center; }

#__next .items-center { align-items: center; }

#__next .justify-center { justify-content: center; }

#__next .gap-2 { gap: 0.5rem; }

#__next .overflow-hidden { overflow: hidden; }

#__next .text-ellipsis { text-overflow: ellipsis; }

#__next .whitespace-nowrap { white-space: nowrap; }

#__next .bg-no-repeat { background-repeat: no-repeat; }

#__next .fill-\[var\(--color-border-muted\)\] { fill: var(--color-border-mu=
ted); }

#__next .text-sm { font-size: 0.875rem; line-height: 1.25rem; }

#__next .text-xs { font-size: 0.75rem; line-height: 1rem; }

#__next .font-medium { font-weight: 500; }

#__next .font-semibold { font-weight: 600; }

#__next .capitalize { text-transform: capitalize; }

#__next .leading-\[18px\] { line-height: 18px; }

#__next .placeholder-gray-500::placeholder { --tw-placeholder-opacity: 1; c=
olor: rgb(107 114 128/var(--tw-placeholder-opacity)); }

#__next .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-cont=
rast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-sa=
turate) var(--tw-sepia) var(--tw-drop-shadow); }

#__next .right-0 { inset-inline-end: 0px; }

#__next .top-0 { top: 0px; }

#__next .m-2 { margin: 0.5rem; }

#__next .mx-2 { margin-inline: 0.5rem; }

#__next .mx-auto { margin-inline: auto; }

#__next .my-2 { margin-bottom: 0.5rem; margin-top: 0.5rem; }

#__next .my-8 { margin-bottom: 2rem; margin-top: 2rem; }

#__next .mb-0 { margin-bottom: 0px; }

#__next .mb-2 { margin-bottom: 0.5rem; }

#__next .mb-4 { margin-bottom: 1rem; }

#__next .mb-6 { margin-bottom: 1.5rem; }

#__next .mb-\[-1px\] { margin-bottom: -1px; }

#__next .ml-1 { margin-inline-start: 0.25rem; }

#__next .ml-2 { margin-inline-start: 0.5rem; }

#__next .mr-1 { margin-inline-end: 0.25rem; }

#__next .mr-2 { margin-inline-end: 0.5rem; }

#__next .mr-\[9px\] { margin-inline-end: 9px; }

#__next .mt-2 { margin-top: 0.5rem; }

#__next .mt-4 { margin-top: 1rem; }

#__next .mt-\[3\.5px\] { margin-top: 3.5px; }

#__next .rounded { border-radius: 0.25rem; }

#__next .rounded-full { border-radius: 9999px; }

#__next .rounded-md { border-radius: 0.375rem; }

#__next .rounded-xl { border-radius: 0.75rem; }

#__next .rounded-b-md { border-end-end-radius: 0.375rem; border-end-start-r=
adius: 0.375rem; }

#__next .rounded-t { border-start-end-radius: 0.25rem; border-start-start-r=
adius: 0.25rem; }

#__next .border { border-width: 1px; }

#__next .border-b-0 { border-bottom-width: 0px; }

#__next .border-t { border-top-width: 1px; }

#__next .border-transparent { border-color: rgba(0, 0, 0, 0); }

#__next .p-0 { padding: 0px; }

#__next .p-2 { padding: 0.5rem; }

#__next .p-4 { padding: 1rem; }

#__next .px-2 { padding-inline: 0.5rem; }

#__next .px-4 { padding-inline: 1rem; }

#__next .px-\[12px\] { padding-inline: 12px; }

#__next .px-\[7px\] { padding-inline: 7px; }

#__next .py-0 { padding-bottom: 0px; padding-top: 0px; }

#__next .py-1 { padding-bottom: 0.25rem; padding-top: 0.25rem; }

#__next .py-2 { padding-bottom: 0.5rem; padding-top: 0.5rem; }

#__next .py-\[5px\] { padding-bottom: 5px; padding-top: 5px; }

#__next .pl-4 { padding-inline-start: 1rem; }

#__next .pr-6 { padding-inline-end: 1.5rem; }

#__next .pt-0 { padding-top: 0px; }

#__next .text-left { text-align: start; }

#__next .first\:mt-0:first-child { margin-top: 0px; }

#__next .hover\:underline:hover { text-decoration-line: underline; }

#__next .hover\:no-underline:hover { text-decoration-line: none; }

#__next .focus\:border-transparent:focus { border-color: rgba(0, 0, 0, 0); =
}

@media (min-width: 640px) {
  #__next .sm\:inline-flex { display: inline-flex; }
  #__next .sm\:min-w-\[50\%\] { min-width: 50%; }
}

* { border-color: var(--color-border-default,var(--color-border-primary)); =
scroll-margin-top: 6rem; }

a { color: var(--color-accent-fg,var(--color-text-link)); }

[role=3D"button"]:focus-visible, a:focus-visible, button:focus-visible, inp=
ut[type=3D"checkbox"]:focus-visible, input[type=3D"radio"]:focus-visible { =
box-shadow: none; outline: 2px solid var(--color-accent-fg,var(--color-text=
-link)); outline-offset: -2px; }

details summary { cursor: pointer; }

@media screen and (width <=3D 320px) {
  html { font-size: 5vw; }
}

.color-bg-default, .color-bg-primary { background-color: var(--color-canvas=
-default,var(--color-bg-primary)); }

.color-bg-secondary, .color-bg-subtle { background-color: var(--color-canva=
s-subtle,var(--color-bg-secondary)); }

.color-bg-tertiary { background-color: var(--color-canvas-subtle,var(--colo=
r-bg-tertiary)); }

.color-bg-canvas { background-color: var(--color-canvas-default,var(--color=
-bg-canvas)); }

.color-bg-inset { background-color: var(--color-canvas-inset,var(--color-bg=
-canvas-inset)); }

.color-bg-overlay { background-color: var(--color-canvas-overlay,var(--colo=
r-bg-overlay)); }

.color-bg-info { background-color: var(--color-accent-subtle,var(--color-bg=
-info)); }

.color-fg-default, .color-text-primary, .link-primary { color: var(--color-=
fg-default,var(--color-text-primary)); }

.color-fg-muted, .color-text-secondary, .link-secondary { color: var(--colo=
r-fg-muted,var(--color-text-secondary)); }

.color-fg-subtle { color: var(--color-fg-subtle,var(--color-diff-blob-num-t=
ext)); }

.color-text-tertiary { color: var(--color-fg-muted,var(--color-text-tertiar=
y)); }

.color-fg-accent, .color-text-link, .link-primary:hover, .link-secondary:ho=
ver { color: var(--color-accent-fg,var(--color-text-link)); }

.color-text-success { color: var(--color-success-fg,var(--color-text-succes=
s)); }

.color-fg-attention { color: var(--color-attention-fg); }

.color-text-danger { color: var(--color-danger-fg,var(--color-text-danger))=
; }

.color-border-primary { border-color: var(--color-border-default,var(--colo=
r-border-primary)); }

.color-border-tertiary { border-color: var(--color-border-default,var(--col=
or-border-tertiary)); }

.color-border-info { border-color: var(--color-accent-emphasis,var(--color-=
border-info)); }

.form-control { background-color: var(--color-canvas-default,var(--color-in=
put-bg)); border-color: var(--color-border-default,var(--color-input-border=
)); vertical-align: middle; }

.form-control:focus { border-color: var(--color-accent-fg,var(--color-text-=
link)); box-shadow: 0 0 0 2px var(--color-accent-fg,var(--color-text-link))=
; outline: none; }

@supports (-webkit-touch-callout:none) {
  .form-control, .form-select { font-size: 1rem; line-height: 1.5rem; }
  @media (min-width: 768px) {
  .form-control, .form-select { font-size: 0.875rem; line-height: 1.25rem; =
}
}
}

.input-contrast { background-color: var(--color-canvas-inset,var(--color-in=
put-contrast-bg)); }

.input-contrast:focus { background-color: var(--color-canvas-default,var(--=
color-input-bg)); }

.color-label-border { border-color: var(--color-border-default,var(--color-=
label-border)); }

.color-box-border-info { border-color: var(--color-accent-muted,var(--color=
-box-border-info)); }

.btn { background-color: var(--color-btn-bg); border-color: var(--color-btn=
-border); border-radius: 0.375rem; border-width: 1px; box-shadow: var(--col=
or-btn-shadow),var(--color-btn-inset-shadow); color: var(--color-btn-text);=
 cursor: pointer; display: inline-block; font-size: 0.875rem; line-height: =
1.25rem; padding-inline: 1rem; padding-bottom: 5px; padding-top: 5px; posit=
ion: relative; transition: color 0.2s cubic-bezier(0.3, 0, 0.5, 1), backgro=
und-color, border-color; white-space: nowrap; }

.BtnGroup, .btn { vertical-align: middle; }

.BtnGroup { align-items: center; background-color: var(
    --color-segmented-control-bg,var(--color-canvas-subtle,var(--color-bg-s=
econdary))
  ); }

.BtnGroup, .BtnGroup-item { border-radius: 0.375rem; display: inline-flex; =
}

.BtnGroup-item { border-color: rgba(0, 0, 0, 0); border-width: 1px; padding=
-inline: 0.25rem; padding-bottom: 0.125rem; padding-top: 0.125rem; }

.BtnGroup-item.BtnGroup-item--selected { background-color: var(
    --color-segmented-control-button-bg,var(--color-btn-bg)
  ); border-color: var(
    --color-segmented-control-button-selected-border,var(--color-border-def=
ault,var(--color-border-primary))
  ); font-weight: 600; }

.BtnGroup-item .btn { background-color: inherit; --tw-shadow: 0 0 #0000; --=
tw-shadow-colored: 0 0 #0000; border-style: none; border-width: 0px; box-sh=
adow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000=
),var(--tw-shadow); padding-inline: 0.5rem; padding-bottom: 0.125rem; paddi=
ng-top: 0.125rem; }

.btn:hover { background-color: var(--color-btn-hover-bg); border-color: var=
(--color-btn-hover-border); transition-duration: 0.1s; }

.btn:active { background-color: var(--color-btn-active-bg); border-color: v=
ar(--color-btn-active-border); outline: rgba(0, 0, 0, 0) solid 2px; outline=
-offset: 2px; transition-property: none; }

.BtnGroup-item .btn:hover { background-color: var(
    --color-action-list-item-default-hover-bg,var(--color-btn-hover-bg)
  ); border-color: rgba(0, 0, 0, 0); }

.BtnGroup-item.BtnGroup-item--selected .btn:hover { background-color: inher=
it; }

.btn-primary { background-color: var(--color-btn-primary-bg); border-color:=
 var(--color-btn-primary-border); box-shadow: var(--color-btn-primary-shado=
w),var(--color-btn-primary-inset-shadow); color: var(--color-btn-primary-te=
xt); }

.btn-primary:hover { background-color: var(--color-btn-primary-hover-bg); b=
order-color: var(--color-btn-primary-hover-border); }

.btn-primary:active { background-color: var(--color-btn-primary-selected-bg=
); box-shadow: var(--color-btn-primary-selected-shadow); }

.btn-primary:disabled { background-color: var(--color-btn-primary-disabled-=
bg); border-color: var(--color-btn-primary-disabled-border); color: var(--c=
olor-btn-primary-disabled-text); }

.octicon { display: inline-block; overflow: visible; fill: currentcolor; ve=
rtical-align: text-bottom; }

.border-0 { border-style: none; }

.team-mention, .user-mention { color: var(--color-fg-default,var(--color-te=
xt-primary)); font-weight: 600; white-space: nowrap; }

.position-relative { position: relative; }

.position-absolute { position: absolute; }

.d-none { display: none !important; }

.btn .octicon { vertical-align: bottom; }

.btn:not(.btn-primary) .octicon:not(.color-text-success) { color: var(--col=
or-fg-muted,var(--color-text-tertiary)); }

.rounded-1 { border-radius: 0.375rem; }

.border-bottom { border-bottom-width: 1px; }

.f6 { font-size: 0.75rem; line-height: 1rem; }

.lh-condensed { line-height: 1.25; }

.text-bold { font-weight: 600; }

.commit-tease-sha { color: var(--color-fg-default,var(--color-text-primary)=
); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Lib=
eration Mono", "Courier New", monospace; font-size: 90%; }

.rounded-2 { border-radius: 0.375rem; }

.task-list-item { list-style-type: none; }

.task-list-item-checkbox { margin: 0px 0.2em 0.25em -1.6em; vertical-align:=
 middle; }

.Box { background-color: var(--color-canvas-default,var(--color-bg-canvas))=
; border-color: var(--color-border-default,var(--color-border-primary)); bo=
rder-radius: 0.375rem; border-width: 1px; }

.Box--condensed { line-height: 1.25; }

.Box-header { background-color: var(--color-canvas-subtle,var(--color-bg-se=
condary)); border-color: var(--color-border-default,var(--color-border-prim=
ary)); border-start-end-radius: 0.375rem; border-start-start-radius: 0.375r=
em; border-width: 1px; margin: -1px -1px 0px; padding: 1rem; }

.Box--condensed .Box-header { padding-inline: 1rem; padding-bottom: 0.5rem;=
 padding-top: 0.5rem; }

.blob-wrapper { border-end-end-radius: 0.375rem; border-end-start-radius: 0=
.375rem; overflow: auto hidden; }

.blob-wrapper-embedded { max-height: 240px; overflow-y: auto; }

.blob-num { color: var(--color-fg-subtle,var(--color-diff-blob-num-text)); =
cursor: pointer; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, =
Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.75rem; =
line-height: 1.25rem; min-width: 50px; padding-inline: 10px; text-align: en=
d; user-select: none; vertical-align: top; white-space: nowrap; width: 1%; =
}

.blob-num:hover { color: var(--color-fg-default,var(--color-diff-blob-num-h=
over-text)); }

.blob-num::before { content: attr(data-line-number); }

.blob-code-inner { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco=
, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.75rem=
; line-height: 1rem; overflow: visible; white-space: pre; overflow-wrap: no=
rmal; }

.blob-wrapper.blob-wrapper-embedded table tr:nth-child(2n) { background-col=
or: initial; }

.email-hidden-toggle a { background-color: var(--color-neutral-muted,var(--=
color-hidden-text-expander-bg)); border-width: 1px; color: var(--color-fg-d=
efault,var(--color-text-primary)); display: inline-block; font-size: 0.75re=
m; font-weight: 600; height: 0.75rem; line-height: 6px; padding-inline: 0.5=
rem; text-decoration-line: none; vertical-align: middle; }

.email-quoted-reply, .email-signature-reply { border-inline-start-width: 4p=
x; border-left-color: var(--color-border-default,var(--color-border-primary=
)); color: var(--color-fg-muted,var(--color-text-secondary)); margin-bottom=
: 1rem; margin-top: 1rem; padding-inline: 1rem; }

.email-hidden-reply { display: none; white-space: pre-wrap; }

.email-hidden-reply.expanded { display: block; }

.ClipboardButton { margin: 0.5rem; padding: 0px; }

.highlight .ClipboardButton, .snippet-clipboard-content .ClipboardButton { =
animation: 0.2s ease 0s 1 normal both running fade-out; opacity: 0; }

.ClipboardButton:focus, .highlight:hover .ClipboardButton, .snippet-clipboa=
rd-content:hover .ClipboardButton { animation: 0.2s ease 0s 1 normal both r=
unning fade-in; opacity: 1; }

img.emoji { background-color: initial; display: inline; max-width: none; ve=
rtical-align: top; }

.form-select { background-image: url("
ucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZm=
lsbD0iIzU4NjA2OSI+PHBhdGggZD0ibTQuNDI3IDkuNDI3IDMuMzk2IDMuMzk2YS4yNS4yNSAwI=
DAgMCAuMzU0IDBsMy4zOTYtMy4zOTZBLjI1LjI1IDAgMCAwIDExLjM5NiA5SDQuNjA0YS4yNS4y=
NSAwIDAgMC0uMTc3LjQyN000LjQyMyA2LjQ3IDcuODIgMy4wNzJhLjI1LjI1IDAgMCAxIC4zNTQ=
gMEwxMS41NyA2LjQ3YS4yNS4yNSAwIDAgMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMCAxLS4xNz=
ctLjQyNyIvPjwvc3ZnPg=3D=3D"); background-position: right 4px center; max-wi=
dth: 100%; white-space: normal; }

[dir=3D"rtl"] .form-select { background-position: left 4px center; }

.form-checkbox { margin-bottom: 15px; margin-top: 15px; padding-inline-star=
t: 1.25rem; vertical-align: middle; }

.form-checkbox input[type=3D"checkbox"], .form-checkbox input[type=3D"radio=
"] { margin-top: 0.25rem; margin-inline: -1.25rem 0.5rem; vertical-align: t=
op; }

.flash { background-color: var(--color-accent-subtle,var(--color-bg-info));=
 border-color: var(--color-accent-muted,var(--color-box-border-info)); bord=
er-radius: 0.375rem; border-width: 1px; color: var(--color-fg-default,var(-=
-color-text-primary)); padding-inline: 1rem; padding-bottom: 1.25rem; paddi=
ng-top: 1.25rem; position: relative; }

.flash-error { background-image: linear-gradient(var(--color-danger-subtle)=
,var(--color-danger-subtle)); border-color: var(--color-danger-muted); }

.flash-warn { background-image: linear-gradient(var(--color-attention-subtl=
e),var(--color-attention-subtle)); border-color: var(--color-attention-mute=
d); }

.gsc-loading { align-items: center; display: flex; flex-direction: column; =
gap: 1rem; }

.gsc-loading-image { background-image: url("https://github.githubassets.com=
/images/mona-loading-default.gif"); background-repeat: no-repeat; backgroun=
d-size: contain; height: 3rem; width: 3rem; }

.gsc-loading-text { font-size: 0.875rem; line-height: 1.25rem; text-align: =
center; white-space: nowrap; width: 100%; }

.gsc-tl-line { background-color: var(--color-border-muted,var(--color-borde=
r-secondary)); flex-shrink: 0; height: 100%; inset-inline-start: 30px; posi=
tion: absolute; top: 0px; width: 2px; }

.gsc-emoji-button:focus .gsc-emoji, .gsc-emoji-button:hover .gsc-emoji { di=
splay: inline-block; transform: scaleX(1.5) scaleY(1.5); transition-duratio=
n: 0.15s; transition-property: transform; transition-timing-function: cubic=
-bezier(0.4, 0, 0.2, 1); }

.gsc-reply:first-child > .gsc-tl-line { height: calc(100% - 16px); top: 16p=
x; }

.gsc-homepage-bg { background-color: var(--color-canvas-default,var(--color=
-bg-canvas)); }

.gsc-timeline { display: flex; flex-direction: column; gap: 1rem; }

.gsc-comment { display: flex; font-size: 0.875rem; line-height: 1.25rem; }

.gsc-main { display: flex; flex-direction: column; gap: 2rem; width: 100%; =
}

.gsc-reactions { display: flex; flex: 1 1 auto; flex-direction: column; jus=
tify-content: center; }

.gsc-reactions-count { font-weight: 600; text-align: center; }

.gsc-comments { display: flex; flex-direction: column; gap: 1.5rem; }

.gsc-header, .gsc-left-header { align-items: center; display: flex; flex: 1=
 1 auto; gap: 0.5rem; }

.gsc-left-header { flex-wrap: wrap; white-space: nowrap; }

.gsc-comments-count, .gsc-comments-count-separator { font-weight: 600; }

.gsc-pagination { background-position: 50% center; background-repeat: repea=
t-x; justify-content: center; margin-bottom: 1rem; margin-top: 1rem; paddin=
g-bottom: 0.5rem; padding-top: 0.5rem; }

.gsc-pagination, .gsc-pagination-button { display: flex; }

.gsc-pagination-button { align-items: center; background-color: var(--color=
-canvas-default,var(--color-bg-primary)); border-radius: 0.25rem; border-wi=
dth: 1px; flex-direction: column; font-size: 0.875rem; line-height: 1.25rem=
; padding-inline: 1.5rem; padding-bottom: 0.5rem; padding-top: 0.5rem; }

.gsc-comment-header { padding-inline: 1rem; padding-top: 0.5rem; }

.gsc-comment-author, .gsc-comment-header { align-items: center; display: fl=
ex; gap: 0.5rem; }

.gsc-comment-author { flex: 1 1 auto; min-width: 0px; }

.gsc-comment-author-avatar { align-items: center; display: flex; min-width:=
 0px; }

.gsc-comment-content { border-start-end-radius: 0.25rem; border-start-start=
-radius: 0.25rem; padding: 1rem; }

.gsc-comment-content.minimized { border-bottom-width: 1px; padding-inline: =
1rem; padding-bottom: 0.5rem; padding-top: 0.5rem; }

.gsc-comment-footer, .gsc-reply-footer { place-content: center space-betwee=
n; display: flex; gap: 0.5rem; margin-bottom: 0.75rem; }

.gsc-comment-reactions { align-items: flex-start; display: flex; gap: 0.5re=
m; justify-content: flex-end; margin-inline-start: 1rem; }

.gsc-comment-replies-count { align-items: center; display: flex; margin-inl=
ine-end: 1rem; white-space: nowrap; }

.gsc-replies { border-end-end-radius: 0.375rem; border-end-start-radius: 0.=
375rem; border-top-width: 1px; padding-top: 0.5rem; }

.gsc-comment-box { font-size: 0.875rem; line-height: 1.25rem; width: 100%; =
}

.gsc-comment-box:not(.gsc-comment-box-is-reply) { border-radius: 0.25rem; b=
order-width: 1px; }

.gsc-comment-box-tabs { align-items: center; border-bottom-width: 1px; bord=
er-start-end-radius: 0.25rem; border-start-start-radius: 0.25rem; display: =
flex; justify-content: space-between; }

.gsc-comment .gsc-comment-box-tabs { border-radius: 0px; border-top-width: =
1px; }

.gsc-comment-box-md-toolbar { align-items: center; display: inline-flex; ma=
rgin-inline: 0.5rem; margin-top: 0.5rem; }

.gsc-toolbar-item { color: var(--color-fg-muted,var(--color-text-secondary)=
); padding: 0.25rem; }

.gsc-toolbar-item:focus, .gsc-toolbar-item:hover { color: var(--color-accen=
t-fg,var(--color-text-link)); }

.gsc-comment-box-main { margin: 0.5rem; }

.gsc-comment-box-preview { border-bottom-width: 2px; min-height: 131px; pad=
ding-inline: 0.5rem; padding-bottom: 1rem; padding-top: 0.5rem; }

.gsc-comment-box-write { border-radius: 0.25rem; }

.gsc-comment-box-write:focus-within { border-color: var(--color-accent-fg,v=
ar(--color-text-link)); box-shadow: 0 0 0 2px var(--color-accent-fg,var(--c=
olor-text-link)); outline: none; }

.gsc-comment-box-textarea { border-radius: 0.25rem; border-width: 1px; max-=
height: 500px; min-height: 100px; padding: 0.5rem; width: 100%; }

.gsc-comment-box-textarea:disabled { cursor: not-allowed; }

.gsc-comment-box-textarea { border-bottom-left-radius: 0px; border-bottom-r=
ight-radius: 0px; border-bottom-style: dashed; }

.gsc-comment-box-textarea:focus { --tw-shadow: 0 0 #0000; --tw-shadow-color=
ed: 0 0 #0000; border-color: var(--color-border-default,var(--color-input-b=
order)); box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-s=
hadow,0 0 #0000),var(--tw-shadow); }

.gsc-comment-box-textarea-extras { border-end-end-radius: 0.25rem; border-e=
nd-start-radius: 0.25rem; border-width: 0px 1px 1px; display: flex; justify=
-content: flex-end; padding-inline: 0.625rem; padding-bottom: 7px; padding-=
top: 7px; }

.gsc-comment-box-bottom { align-items: center; display: flex; margin: 0.5re=
m; }

.gsc-comment-box-markdown-hint { font-size: 0.75rem; line-height: 1rem; }

.gsc-comment-box-markdown-hint:hover { text-decoration-line: none; }

.gsc-comment-box-buttons { display: inline-flex; flex-shrink: 0; margin-inl=
ine-start: auto; }

.gsc-reply-box { border-end-end-radius: 0.375rem; border-end-start-radius: =
0.375rem; border-top-width: 1px; padding-inline: 1rem; padding-bottom: 0.5r=
em; padding-top: 0.5rem; }

.gsc-reply-box, .gsc-social-reaction-summary-item { display: flex; }

.gsc-social-reaction-summary-item { align-items: center; background-color: =
initial; border-color: var(--color-border-default,var(--color-border-primar=
y)); border-radius: 9999px; border-width: 1px; color: var(--color-fg-muted,=
var(--color-text-secondary)); font-size: 0.75rem; height: 26px; justify-con=
tent: center; line-height: 24px; padding-inline: 4px; white-space: nowrap; =
}

.gsc-social-reaction-summary-item:disabled { cursor: not-allowed; }

.gsc-social-reaction-summary-item:hover:enabled { background-color: var(--c=
olor-social-reaction-bg-hover); }

.gsc-social-reaction-summary-item.has-reacted { background-color: var(--col=
or-accent-subtle,var(--color-bg-info)); border-color: var(--color-accent-em=
phasis,--color-social-reaction-border); color: var(--color-accent-fg,var(--=
color-text-link)); }

.gsc-social-reaction-summary-item.has-reacted:hover:enabled { background-co=
lor: var(--color-social-reaction-bg-reacted-hover); }

.gsc-social-reaction-summary-item-count { margin-inline-start: 2px; max-wid=
th: 100px; overflow: hidden; padding-inline: 0.25rem; text-overflow: ellips=
is; white-space: nowrap; }

.gsc-direct-reaction-button-emoji { display: inline-block; height: 1rem; li=
ne-height: 1.25; width: 1rem; }

.gsc-upvotes { flex-shrink: 0; margin-inline-end: 0.5rem; text-align: cente=
r; width: 3.5rem; }

.gsc-upvote-button { font-weight: 500; }

.gsc-upvote-button:disabled { background-color: initial; border-style: none=
; cursor: auto; padding: 0px; }

.gsc-reactions-menu { position: relative; }

.gsc-reactions-button { align-items: center; background-color: var(--color-=
canvas-subtle,var(--color-bg-secondary)); cursor: pointer; display: flex; f=
ont-size: 0.75rem; height: 26px; justify-content: center; line-height: 1.25=
; list-style-type: none; padding-inline: 0px; width: 26px; }

.gsc-reactions-button::-webkit-details-marker, .gsc-reactions-button::befor=
e { display: none; }

.gsc-reactions-button::marker { content: ""; }

.gsc-reactions-button:hover { color: var(--color-fg-muted,var(--color-text-=
tertiary)); }

.gsc-reactions-button.popover-only { background-color: initial; border-styl=
e: none; border-width: 1px; }

.gsc-reactions-button.popover-only:hover { color: var(--color-accent-fg,var=
(--color-text-link)); }

.gsc-reactions-popover.open::before { border: 8px solid rgba(0, 0, 0, 0); c=
ontent: ""; position: absolute; }

.gsc-reactions-popover.open::after { border: 7px solid rgba(0, 0, 0, 0); co=
ntent: ""; position: absolute; }

.gsc-reactions-popover.open.bottom::before { border-bottom-color: var(--col=
or-border-default,var(--color-border-primary)); top: -16px; }

.gsc-reactions-popover.open.bottom::after { border-bottom: 8px solid var(--=
color-canvas-overlay,var(--color-bg-overlay)); top: -15px; }

.gsc-reactions-popover.open.top::before { border-top-color: var(--color-bor=
der-default,var(--color-border-primary)); bottom: -16px; }

.gsc-reactions-popover.open.top::after { border-top: 8px solid var(--color-=
canvas-overlay,var(--color-bg-overlay)); bottom: -15px; }

.gsc-reactions-popover.open.left::before { inset-inline-start: 9px; }

.gsc-reactions-popover.open.left::after { inset-inline-start: 10px; }

.gsc-reactions-popover.open.right::before { inset-inline-end: 9px; }

.gsc-reactions-popover.open.right::after { inset-inline-end: 10px; }

.gsc-reactions-popover { position: absolute; transform-origin: center cente=
r; visibility: hidden; width: 146px; z-index: 20; --tw-scale-x: .5; --tw-sc=
ale-y: .5; border-radius: 0.25rem; border-width: 1px; margin-top: 2px; tran=
sition-duration: 0.1s; transition-property: color, background-color, border=
-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform=
, filter, backdrop-filter, -webkit-backdrop-filter; transition-timing-funct=
ion: cubic-bezier(0.4, 0, 0.2, 1); }

.gsc-reactions-popover, .gsc-reactions-popover.open { transform: translate(=
var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX=
(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY=
(var(--tw-scale-y)); }

.gsc-reactions-popover.open { visibility: visible; --tw-scale-x: 1; --tw-sc=
ale-y: 1; }

.gsc-reactions-popover.right { inset-inline-end: 0px; }

.gsc-reactions-popover.top { bottom: 2.25rem; inset-inline-start: -0.375rem=
; }

.gsc-reactions-popover.bottom { inset-inline-start: -0.375rem; top: 2.25rem=
; }

.gsc-emoji-button { border-radius: 0px; height: 2rem; margin-inline-end: -1=
px; margin-top: -1px; width: 2rem; }

.gsc-emoji-button.has-reacted { border-width: 1px; }

.gsc-emoji-button.no-token { cursor: not-allowed; }

.gsc-direct-reaction-buttons { display: flex; flex-wrap: wrap; gap: 0.5rem;=
 }

.gsc-direct-reaction-button { align-items: baseline; border-width: 1px; }

.gsc-reply { padding: 1rem 1rem 0.5rem; position: relative; }

.gsc-reply-author-avatar { flex-shrink: 0; z-index: 10; }

.gsc-reply-header { display: flex; gap: 0.5rem; margin-bottom: 0.5rem; padd=
ing-bottom: 0.25rem; padding-top: 0.25rem; }

.gsc-reply-author { align-items: center; display: flex; flex: 1 1 auto; gap=
: 0.5rem; min-width: 0px; }

.gsc-reply-content { padding-bottom: 0.5rem; width: 100%; }

.gsc-reply-content.markdown .highlight pre, .gsc-reply-content.markdown pre=
 { background-color: var(--color-neutral-muted,var(--color-hidden-text-expa=
nder-bg)); }

.gsc-reply-content.not-shown { padding-bottom: 0px; }

.gsc-reply-footer { margin-bottom: 0px; }

.gsc-reply-reactions { align-content: center; display: flex; gap: 0.5rem; m=
argin-inline: -0.25rem 1rem; }

.gsc-is-fixed-width { font-family: ui-monospace, SFMono-Regular, Menlo, Mon=
aco, Consolas, "Liberation Mono", "Courier New", monospace; }

.inline-flex { display: inline-flex; }

.pl-c { color: var(--color-prettylights-syntax-comment); }

.pl-smw, .pl-v { color: var(--color-prettylights-syntax-variable); }

.pl-c1, .pl-s .pl-v { color: var(--color-prettylights-syntax-constant); }

.pl-e, .pl-en { color: var(--color-prettylights-syntax-entity); }

.pl-s .pl-s1, .pl-smi { color: var(--color-prettylights-syntax-storage-modi=
fier-import); }

.pl-ent { color: var(--color-prettylights-syntax-entity-tag); }

.pl-k { color: var(--color-prettylights-syntax-keyword); }

.pl-pds, .pl-s, .pl-s .pl-pse .pl-s1, .pl-sr, .pl-sr .pl-cce, .pl-sr .pl-sr=
a, .pl-sr .pl-sre { color: var(--color-prettylights-syntax-string); }

.pl-bu { color: var(--color-prettylights-syntax-brackethighlighter-unmatche=
d); }

.pl-ii { background-color: var(--color-prettylights-syntax-invalid-illegal-=
bg); color: var(--color-prettylights-syntax-invalid-illegal-text); }

.pl-c2 { background-color: var(--color-prettylights-syntax-carriage-return-=
bg); color: var(--color-prettylights-syntax-carriage-return-text); }

.pl-c2::before { content: "^M"; }

.pl-sr .pl-cce { color: var(--color-prettylights-syntax-string-regexp); fon=
t-weight: 700; }

.pl-ml { color: var(--color-prettylights-syntax-markup-list); }

.pl-mh, .pl-mh .pl-en, .pl-ms { color: var(--color-prettylights-syntax-mark=
up-heading); font-weight: 700; }

.pl-mi { color: var(--color-prettylights-syntax-markup-italic); font-style:=
 italic; }

.pl-mb { color: var(--color-prettylights-syntax-markup-bold); font-weight: =
700; }

.pl-md { background-color: var(--color-prettylights-syntax-markup-deleted-b=
g); color: var(--color-prettylights-syntax-markup-deleted-text); }

.pl-mi1 { background-color: var(--color-prettylights-syntax-markup-inserted=
-bg); color: var(--color-prettylights-syntax-markup-inserted-text); }

.pl-mc { background-color: var(--color-prettylights-syntax-markup-changed-b=
g); color: var(--color-prettylights-syntax-markup-changed-text); }

.pl-mi2 { background-color: var(--color-prettylights-syntax-markup-ignored-=
bg); color: var(--color-prettylights-syntax-markup-ignored-text); }

.pl-mdr { color: var(--color-prettylights-syntax-meta-diff-range); font-wei=
ght: 700; }

.pl-ba { color: var(--color-prettylights-syntax-brackethighlighter-angle); =
}

.pl-sg { color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);=
 }

.pl-corl { color: var(--color-prettylights-syntax-constant-other-reference-=
link); text-decoration: underline; }

body * { border-color: var(--color-border-default,var(--color-border-primar=
y)); }

a { text-decoration-line: none; }

a:hover { text-decoration-line: underline; }

.markdown { overflow-wrap: break-word; }

.markdown strong { font-weight: 600; }

.markdown h1, .markdown h2, .markdown h3, .markdown h4, .markdown h5, .mark=
down h6 { font-weight: 600; margin-bottom: 1rem; margin-top: 1.5rem; }

.markdown h1, .markdown h2 { border-bottom-width: 1px; padding-bottom: 0.5r=
em; }

.markdown h1 { font-size: 1.875rem; line-height: 2.25rem; }

.markdown h2 { font-size: 1.5rem; line-height: 2rem; }

.markdown h3 { font-size: 1.25rem; line-height: 1.75rem; }

.markdown h4 { font-size: 1rem; line-height: 1.5rem; }

.markdown h5 { font-size: 0.875rem; line-height: 1.25rem; }

.markdown h6 { color: var(--color-fg-muted,var(--color-text-secondary)); fo=
nt-size: 0.75rem; line-height: 1rem; }

.markdown .g-emoji { font-family: "Apple Color Emoji", "Segoe UI Emoji", "S=
egoe UI Symbol", sans-serif; font-weight: 400; }

.markdown .highlight, .markdown blockquote, .markdown details, .markdown dl=
, .markdown ol, .markdown p, .markdown pre, .markdown table, .markdown ul {=
 margin-bottom: 1rem; }

.markdown .highlight pre, .markdown pre { background-color: var(--color-can=
vas-subtle,var(--color-bg-tertiary)); border-radius: 0.375rem; font-size: 0=
.75rem; line-height: 1.45; overflow: auto; padding: 1rem; }

.markdown .highlight pre { margin-bottom: 0px; overflow-wrap: normal; word-=
break: normal; }

.markdown pre > code { background: rgba(0, 0, 0, 0); }

.markdown code:not(pre > code), .markdown tt { background-color: var(--colo=
r-neutral-muted); border-radius: 0.375rem; font-size: 0.75rem; line-height:=
 1rem; padding-inline: 0.25rem; padding-bottom: 2px; padding-top: 2px; }

.markdown table { background-color: var(--color-canvas-default,var(--color-=
bg-primary)); }

.markdown table td, .markdown table th { border-width: 1px; padding-inline:=
 0.75rem; padding-bottom: 6px; padding-top: 6px; }

.markdown table th { font-weight: 600; }

.markdown table tr:nth-child(2n) { background-color: var(--color-canvas-sub=
tle,var(--color-bg-tertiary)); }

.markdown blockquote { border-inline-start-width: 3px; color: var(--color-f=
g-muted,var(--color-text-tertiary)); padding-inline: 1rem; }

.markdown ol, .markdown ul { padding-inline-start: 2em; }

.markdown ul { list-style-type: disc; }

.markdown ol { list-style-type: decimal; }

.markdown li + li { margin-top: 0.25rem; }

.markdown li > p { margin-top: 1rem; }

.markdown ol ol, .markdown ol ul, .markdown ul ol, .markdown ul ul { margin=
-bottom: 0px; margin-top: 0px; }

.markdown ul ul { list-style-type: circle; }

.markdown ul ul ul { list-style-type: square; }

.markdown kbd { background-color: var(--color-canvas-subtle,var(--color-bg-=
secondary)); border-radius: 0.375rem; border: 1px solid var(--color-border-=
default,var(--color-border-tertiary)); box-shadow: inset 0 -1px 0 var(--col=
or-border-default,var(--color-border-tertiary)); color: var(--color-fg-defa=
ult,var(--color-auto-gray-7)); font-size: 11px; padding-inline: 5px; paddin=
g-bottom: 3px; padding-top: 3px; vertical-align: middle; }

.markdown hr { background-color: var(--color-border-default,var(--color-bor=
der-primary)); height: 0.25em; margin-bottom: 1.5rem; margin-top: 1.5rem; }

.markdown .footnotes { border-top-width: 1px; color: var(--color-fg-muted,v=
ar(--color-text-tertiary)); font-size: 0.75rem; line-height: 1rem; }

.markdown .footnotes ol { padding-inline-start: 1rem; }

.markdown .footnotes .data-footnote-backref .g-emoji { font-family: monospa=
ce; }

.markdown sup > a::before { content: "["; }

.markdown sup > a::after { content: "]"; }

.markdown > :last-child { margin-bottom: 0px; }

.markdown > :first-child { margin-top: 0px; }
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: https://giscus.app/themes/light.css

@charset "utf-8";

main { --color-prettylights-syntax-comment: #6e7781; --color-prettylights-s=
yntax-constant: #0550ae; --color-prettylights-syntax-entity: #8250df; --col=
or-prettylights-syntax-storage-modifier-import: #24292f; --color-prettyligh=
ts-syntax-entity-tag: #116329; --color-prettylights-syntax-keyword: #cf222e=
; --color-prettylights-syntax-string: #0a3069; --color-prettylights-syntax-=
variable: #953800; --color-prettylights-syntax-brackethighlighter-unmatched=
: #82071e; --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; --col=
or-prettylights-syntax-invalid-illegal-bg: #82071e; --color-prettylights-sy=
ntax-carriage-return-text: #f6f8fa; --color-prettylights-syntax-carriage-re=
turn-bg: #cf222e; --color-prettylights-syntax-string-regexp: #116329; --col=
or-prettylights-syntax-markup-list: #3b2300; --color-prettylights-syntax-ma=
rkup-heading: #0550ae; --color-prettylights-syntax-markup-italic: #24292f; =
--color-prettylights-syntax-markup-bold: #24292f; --color-prettylights-synt=
ax-markup-deleted-text: #82071e; --color-prettylights-syntax-markup-deleted=
-bg: #ffebe9; --color-prettylights-syntax-markup-inserted-text: #116329; --=
color-prettylights-syntax-markup-inserted-bg: #dafbe1; --color-prettylights=
-syntax-markup-changed-text: #953800; --color-prettylights-syntax-markup-ch=
anged-bg: #ffd8b5; --color-prettylights-syntax-markup-ignored-text: #eaeef2=
; --color-prettylights-syntax-markup-ignored-bg: #0550ae; --color-prettylig=
hts-syntax-meta-diff-range: #8250df; --color-prettylights-syntax-brackethig=
hlighter-angle: #57606a; --color-prettylights-syntax-sublimelinter-gutter-m=
ark: #8c959f; --color-prettylights-syntax-constant-other-reference-link: #0=
a3069; --color-btn-text: #24292f; --color-btn-bg: #f6f8fa; --color-btn-bord=
er: #1f232826; --color-btn-shadow: 0 1px 0 #1f23280a; --color-btn-inset-sha=
dow: inset 0 1px 0 #ffffff40; --color-btn-hover-bg: #f3f4f6; --color-btn-ho=
ver-border: #1f232826; --color-btn-active-bg: #ebecf0; --color-btn-active-b=
order: #1f232826; --color-btn-selected-bg: #eeeff2; --color-btn-primary-tex=
t: #fff; --color-btn-primary-bg: #1f883d; --color-btn-primary-border: #1f23=
2826; --color-btn-primary-shadow: 0 1px 0 #1f23281a; --color-btn-primary-in=
set-shadow: inset 0 1px 0 #ffffff08; --color-btn-primary-hover-bg: #1a7f37;=
 --color-btn-primary-hover-border: #1f232826; --color-btn-primary-selected-=
bg: #187733; --color-btn-primary-selected-shadow: inset 0 1px 0 #002d1133; =
--color-btn-primary-disabled-text: #fffc; --color-btn-primary-disabled-bg: =
#94d3a2; --color-btn-primary-disabled-border: #1f232826; --color-action-lis=
t-item-default-hover-bg: #d0d7de52; --color-segmented-control-bg: #eaeef2; =
--color-segmented-control-button-bg: #fff; --color-segmented-control-button=
-selected-border: #8c959f; --color-fg-default: #1f2328; --color-fg-muted: #=
656d76; --color-fg-subtle: #6e7781; --color-canvas-default: #fff; --color-c=
anvas-overlay: #fff; --color-canvas-inset: #f6f8fa; --color-canvas-subtle: =
#f6f8fa; --color-border-default: #d0d7de; --color-border-muted: #d8dee4; --=
color-neutral-muted: #afb8c133; --color-accent-fg: #0969da; --color-accent-=
emphasis: #0969da; --color-accent-muted: #54aeff66; --color-accent-subtle: =
#ddf4ff; --color-success-fg: #1a7f37; --color-attention-fg: #9a6700; --colo=
r-attention-muted: #d4a72c66; --color-attention-subtle: #fff8c5; --color-da=
nger-fg: #d1242f; --color-danger-muted: #ff818266; --color-danger-subtle: #=
ffebe9; --color-primer-shadow-inset: inset 0 1px 0 #d0d7de33; --color-scale=
-gray-1: #eaeef2; --color-scale-blue-1: #b6e3ff; --color-social-reaction-bg=
-hover: var(--color-scale-gray-1); --color-social-reaction-bg-reacted-hover=
: var(--color-scale-blue-1); }

main .pagination-loader-container { background-image: url("https://github.c=
om/images/modules/pulls/progressive-disclosure-line.svg"); }

main .gsc-loading-image { background-image: url("https://github.githubasset=
s.com/images/mona-loading-default.gif"); }
------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7----
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: https://github.githubassets.com/images/mona-loading-default.gif

R0lGODlhgAGAAZECAPr7/ERNVv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhN
UDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4
OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3Jl
IDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpS
REYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMj
Ij4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5h
ZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh
cC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
eGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5OTk5ODkxZS0wMWE2
LTRlMTItYWM1Mi00YTIzMzI1MTViYjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkU2QTk5
NkYxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkU2
QTk5NkUxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhv
dG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5z
dGFuY2VJRD0ieG1wLmlpZDoxOTQyMDFlMi00OGRjLTQ3OTgtOTFlNi05ZjkyNzhjNTJlZTUiIHN0
UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMjk3YTUwZC00MTM4LWVmNDYt
YTY3Ni1kZTkzNDU1ZjNmOTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94Onht
cG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi
4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qp
qKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFw
b25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3
NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh
+QQJEAACACwAAAAAgAGAAQAC/5SPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73
/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5LL5jE6r1+y2+w2Py+f0uv2Oz+v3/L7/
DxgoOEhYaHiImKi4yNjo+AgZKTlJWWl5iZmpucnZ6fkJGhoRQFpqeoqaakql2up6Kmr1OtvKSnu7
GmuLi7vLS6vr+/sqPFwbLGUMPKU8i5zc7Focnfv8RH0MjY1qDbWdOr3dff0Ny1xePb6Enu7NTqre
9A5//h7PNB8Qjn2/Pr9PrZ+SfACjCUxCsB67g0gSalvI0EY+hzEm/otYwqK9Gf8aIWIc0REdjZDl
PpIg+W0kSn4mRaxkKeNlwJYhZBrkaFMZzZo5jans+WsnCKDDfhK9JfTDUV5GlxJL2sEpUpxSn0Ld
UNUZ1ayqrnLgKm0rWHNeM4ztKvYsvbIY1HJLq5atWbftXtCtK1fC3VJN3ea9sLfohMBB/1YgzHQw
4qmGFS/Wqvcx5MajJFutbDkbZQiZw0buDG4zZtBkR5PmK5rz6dKqV6NO7cA13gayX8NmUHut6dW3
Y+emkFtfb9y/HcseTrw28OLIEwRfrry5c+a7T0ufHv3z8esHnht33Ti4eKIfx5u3Wf68epLp17uf
2P69fJEY59svWf++/psR9/v/95nffwIu09+ABnrG0IEKhlbggg4K1+CDCsYnoYEUVijghRj6p+GG
HuriYYisfSJiiRCGYqKIIKb4YSwstijKixuuKKOENNbo4I04Tujijjn26COPMQYpJIpEHqjjkRwC
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

------MultipartBoundary--Q5m1lEr4AsiAqZXMyXGnq0MR7QbyVeiN61XzDaAPs7------
